Skip to content
Lightweight 3d physics engine for javascript
JavaScript HTML
Branch: gh-pages
Clone or download

Latest commit

lo-th Merge pull request #85 from sebavan/gh-pages
Fix minification process
Latest commit dc745bb Jan 21, 2019

Files

Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
build Fix minification process Jan 21, 2019
examples update to last three and sea3d Jun 20, 2017
src Fix minification process Jan 21, 2019
utils up Jan 28, 2017
.gitignore new version Jan 23, 2017
.npmignore new version Jan 23, 2017
LICENSE new version Jan 23, 2017
README.md Add npm and CDNJS version badge in README.md May 14, 2017
docs.html update to last three and sea3d Jun 20, 2017
index.html update to last three and sea3d Jun 20, 2017
package.json Fix minification process Jan 21, 2019
rollup.config.js New Build Jan 10, 2019

README.md


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.
Version Version

Home

Docs

  • docs (in progress)

Demo

Usage

Download the minified library and include it in your HTML.
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.
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

You can’t perform that action at this time.