The definitive source of the best
JavaScript libraries, frameworks, and plugins.

  • ×

    Lightweight 3d physics engine for javascript
    Filed under  › 

    • 🔾58%Overall
    • 2,959
    • 29.6 days
    • 🕩292
    • 👥9

    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



    • docs (in progress)



    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
    // and copy position and rotation to three mesh
    myMesh.position.copy( body.getPosition() );
    myMesh.quaternion.copy( body.getQuaternion() );


    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


    Is time to switch ES6 worker version with the last OimoPhysics 1.2.2 :)
    go to new PHY repro

    Show All