Search code examples
javascriptbullet

BulletPhysics (ammo.js) - How would you go about applying force to an object?


To clarify - ammo.js is a port of Bullet Physics using mscripten

I have a character (essentially a block) that needs to be pushed with force. I have tried (I think) all of the methods for forces but I still cannot move the block.

setVelocity(1,0,0) does not even move the block - it just stops gravity from acting on it! applyImpulse([0,0,200000],[0,0,0]) does absolutely nothing.
applyForce([0,0,200000],[0,0,0]) does absolutely nothing.


Solution

  • Due to the fact that ammo.js is an emscripten port, you have to use its native datatypes to talk to it...

    So for setting velocity you'd need to body.setLinearVelocity(new Ammo.btVector3(1,0,0));

    Same goes for applyForce and applyImpulse.

    In my code, I usually make a set of temporary btVector3s, and use them throughout the file, in order to reduce the overhead of allocation and garbage collection..

    var tbv30 = new Ammo.btVector3();
    
    function setBodyVelocity(body,x,y,z){
        tbv30.setValue(x,y,z);
        body.setLinearVelocity(tbv30);
    }
    

    good luck :D