Awesome
<p align="center"><a href="http://lo-th.github.io/Oimo.js/"><img src="http://lo-th.github.io/Oimo.js/examples/assets/img/logo.png"/></a><br> Oimo.js is a lightweight 3d physics engine for JavaScript.<br> It's a full javascript conversion of <a href="https://github.com/saharan/OimoPhysics/">OimoPhysics</a><br> Originally created by <a href="http://el-ement.com/blog/">Saharan</a> for actionscript 3.0. <br> <a href="https://www.npmjs.com/package/oimo"> <img src="https://img.shields.io/npm/v/oimo.svg" alt="Version"> </a> <a href="https://cdnjs.com/libraries/oimo"> <img src="https://img.shields.io/cdnjs/v/oimo.svg" alt="Version"> </a> </p>Home
- oimo.js (in progress)
Docs
- docs (in progress)
Demo
- Basic test
- Compound test (chair)
- Compound test (capsule)
- Ragdoll test
- Collision test
- Moving test
- Terrain test
- Car test
- Walker test
- Worker test
Usage
Download the minified library and include it in your HTML.<br>
Alternatively, use Node and install the package: npm install oimo
<script src="js/oimo.min.js"></script>
Create physics world:
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
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.<br> In basic demo with THREE, I scaled all by 100 so objects are between 10 to 1000 in THREE units.<br><br>
/!\ Shape name change in last version <br> SphereShape to Sphere, BoxShape to Box, CylinderShape to Cylinder <br>
UPDATE
Is time to switch ES6 worker version with the last OimoPhysics 1.2.2 :)<br> go to new PHY repro