JavaScripting

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


  • ×

    Lightweight 3d physics engine for javascript
    Filed under  › 

    • 🔾52%Overall
    • 1,292
    • 5.2 days
    • 🕩122
    • 👥7


    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

    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

    Show All