Havok, how to apply torque

Is there a way with Havok to apply torque ?

There is body.applyForce for applying a force affecting position, but how do I do the same for rotation?

Looking for something like NVIDIA(R) PhysX(R) SDK 3.4 API Reference: PxRigidBody Class Reference or Unity - Scripting API: Rigidbody.AddTorque

I know there is body.setAngularVelocity but that seems to introduce non interpolated behavior and weird twitching, so guessing this is not the optimal way.

Hello! What kind of twitching are you seeing? Can you share a playground?

What I’m seeing is “twitching” with a follow camera targeting my player, when making the players physicsbody turn. Will try isolating this in a playground.

Wondering how the Havok / render update relates and if there is any interpolation on the render side, e.g. similar to Unity: Unity - Scripting API: Rigidbody.interpolation

Looks like the “twitching” is actually coming from the FollowCamera. Using another simple TargetCamera just parented to the PhysicsBody looks much more smooth.

Anyone here figured out how to do that? It actually don’t have a applyTorque function.

@eoin is this something we can add?

Oh, I’m surprised the plugin doesn’t have an applyAngularImpulse - definitely something we should add. In the meantime, something like this should do the trick:

    var body = ...;
    var torqueWorld = ...;

    var massProps = body.getMassProperties();
    var worldFromInertia = massProps.inertiaOrientation.multiply(body.transformNode.absoluteRotationQuaternion);
    var inertiaFromWorld = worldFromInertia.conjugate();
    var impLocal = torqueWorld.applyRotationQuaternion(inertiaFromWorld);
    var impWorld = impLocal.multiply(massProps.inertia).applyRotationQuaternion(worldFromInertia);
    var newAV = body.getAngularVelocity().add(impWorld.scale(scene.getPhysicsEngine().getTimeStep()));
    body.setAngularVelocity(newAV);
2 Likes

Hi
Why doesn’t the Havok plugin have applyTorque/applyAngularImpulse functions? How do you implement them if simple things can’t be achieved without workarounds?
It won’t work to simply convert the angle into a vector and apply the impulse to that vector!

1 Like

Havok API has been updated with appropriate methods. I’ll update the physics API in the comign days.

1 Like