Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/lo-th/Oimo.js
Lightweight 3d physics engine for javascript
https://github.com/lo-th/Oimo.js
Last synced: 6 days ago
JSON representation
Lightweight 3d physics engine for javascript
- Host: GitHub
- URL: https://github.com/lo-th/Oimo.js
- Owner: lo-th
- License: mit
- Created: 2013-10-17T00:15:58.000Z (about 11 years ago)
- Default Branch: gh-pages
- Last Pushed: 2021-07-08T16:40:21.000Z (over 3 years ago)
- Last Synced: 2024-05-18T02:43:02.786Z (6 months ago)
- Language: JavaScript
- Homepage: http://lo-th.github.io/Oimo.js
- Size: 30.3 MB
- Stars: 3,000
- Watchers: 115
- Forks: 296
- Open Issues: 49
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-canvas - Oimo.js - th.github.io/Oimo.js/index.html#basic)] - Lightweight 3d physics engine for javascript. ![](https://img.shields.io/github/stars/lo-th/Oimo.js?style=social) ![](https://img.shields.io/github/forks/lo-th/Oimo.js?style=social) (Libraries / 3D libraries)
- awesome-open-source-games - Oimo.js - Lightweight 3d physics engine for JavaScript. (Frameworks/Engines/Libraries / IOS)
- awesome-game-engine-dev - Oimo.js - Lightweight 3D physics engine. [[Demos](http://lo-th.github.io/Oimo.js)] (Libraries / JavaScript)
- awesome-webxr-development - Oimo.js - badge] - A lightweight 3d physics engine for JavaScript. It's a full javascript conversion of OimoPhysics (A lightweight 3D physics engine originally created for ActionScript 3.0) (Physics Engine / Visual Animation Editor)
README
Oimo.js is a lightweight 3d physics engine for JavaScript.
It's a full javascript conversion of OimoPhysics
Originally created by Saharan for actionscript 3.0.
### Home ###
- [oimo.js](http://lo-th.github.io/Oimo.js/index.html) (in progress)
### Docs ###
- [docs](http://lo-th.github.io/Oimo.js/docs.html) (in progress)
### Demo ###
- [Basic test](http://lo-th.github.io/Oimo.js/examples/test_basic.html)
- [Compound test (chair)](http://lo-th.github.io/Oimo.js/examples/test_compound.html)
- [Compound test (capsule)](http://lo-th.github.io/Oimo.js/examples/test_compound2.html)
- [Ragdoll test](http://lo-th.github.io/Oimo.js/examples/test_ragdoll.html)
- [Collision test](http://lo-th.github.io/Oimo.js/examples/test_collision.html)
- [Moving test](http://lo-th.github.io/Oimo.js/examples/test_moving.html)
- [Terrain test](http://lo-th.github.io/Oimo.js/examples/test_terrain.html)
- [Car test](http://lo-th.github.io/Oimo.js/examples/test_vehicle.html)
- [Walker test](http://lo-th.github.io/Oimo.js/examples/test_walker.html)
- [Worker test](http://lo-th.github.io/Oimo.js/examples/test_worker.html)### Usage ###
Download the [minified library](http://lo-th.github.io/Oimo.js/build/oimo.min.js) and include it in your HTML.
Alternatively, use **Node** and install the [package](https://www.npmjs.com/package/oimo): `npm install oimo````html
```
Create physics world:
```javascript
world = new OIMO.World({
timestep: 1/60,
iterations: 8,
broadphase: 2, // 1 brute force, 2 sweep and prune, 3 volume tree
worldscale: 1, // scale full world
random: true, // randomize sample
info: false, // calculate statistic or not
gravity: [0,-9.8,0]
});
```Add physics object or joint
```javascript
var body = world.add({
type:'sphere', // type of shape : sphere, box, cylinder
size:[1,1,1], // size of shape
pos:[0,0,0], // start position in degree
rot:[0,0,90], // start rotation in degree
move:true, // dynamic or statique
density: 1,
friction: 0.2,
restitution: 0.2,
belongsTo: 1, // The bits of the collision groups to which the shape belongs.
collidesWith: 0xffffffff // The bits of the collision groups with which the shape collides.
});var body = world.add({
type:'jointHinge', // type of joint : jointDistance, jointHinge, jointPrisme, jointSlide, jointWheel
body1: "b1", // name or id of attach rigidbody
body2: "b1" // name or id of attach rigidbody
});// update world
world.step();// and copy position and rotation to three mesh
myMesh.position.copy( body.getPosition() );
myMesh.quaternion.copy( body.getQuaternion() );
```### Note ###
Oimo Physics uses international system units: 0.1 to 10 meters max for dynamic body.
In basic demo with THREE, I scaled all by 100 so objects are between 10 to 1000 in THREE units./!\ Shape name change in last version
SphereShape to Sphere, BoxShape to Box, CylinderShape to Cylinder### UPDATE ###
Is time to switch ES6 worker version with the last OimoPhysics 1.2.2 :)
go to new [PHY repro](https://github.com/lo-th/phy)