I'm using three.js with enable3d (ammo.js)
I have little experience with graphics and physics but I've spent few hours trying to understand how ...body.appyImpulse() works and I think I've figure out that every time this method is called it accumulates the forces.
So, for instance, if I run the following:
sphere.body.applyImpulse({ x: 2, y: 0, z: 0 }, { x: 0.01, y: 0.01, z: 0 });
The sphere starts moving and rotating forward because a force A has been applied to the sphere at a specific point P1 of the sphere.
If I call that method again, the sphere will gain more velocity and rotation because a second force B is applied and summed up to A.
The question is if there is a way of, instead of adding more and more forces, changing the first one that has been applied.
So that, for example, the force A (triggered by the first call to applyImpulse) increases or decreases intensity depending on the distance between the point P1 attached to the sphere (positively charged) and a second point p2 outside the sphere (negatively charged).
Do we have any control/access over the multiple forces applied to the sphere body?
UPDATE:
I think I've found a workaround to the problem which is to set, on each update, angularVelocity and velocity to 0 ({x: 0, y: 0, z: 0}) before computing and applying all the impulses.
The question remains whether there is also the possibility of managing the various forces applied through applyImpulse.
Thanks.
So after few days of testing and playing around with applyImpulse I think I can answer myself that: it is true that applyImpulse accumulates each time it is called but, for a force that lasts over time, you can set angularVelocity and velocity to 0 before using appluImpulse and things work pretty fine.