Using Bullet Physics.

There's a rigid body that is rotated. For some delta-time I need to rotate that body to have rotation of (0, y, 0) - keep the old y value rotation but reset x and z. The position of the body is described by Quaternion. And, of course, I can modify the angular velocity.

So, how to calculate what angular velocity should I set for rigidBody to rotate to necessary rotation angle in delta-time? Seen this article: http://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation, but it would be exageration to say if I understand how to implement those formulas...

Here's what I have as initial state of the rigidBody:

 Quaternion rotation = new Quaternion();
 Vector3 angles = new Vector3();
  • \$\begingroup\$ Surely you mean the rotation is described by a quaternion? I don't see what's wrong with simply zeroning angles.x and angles.z, then using rotation.setAxisAngle(angles), constructing a new rotation matrix and setting the body's world transform. \$\endgroup\$
    – nahano
    Commented Apr 24, 2014 at 20:02
  • \$\begingroup\$ Yes, rotation is described by a quaternion, and I can force it to be 0, y, 0, 0 if I want, and it's actually working. But the problem is that I need this rotation to go smoothly over time. Imagine rigid body hovering. When you put it into the air it can have some rotation, but when object reaches the top hovering altitude it needs to be straightened. I need to apply rotation tick by tick while object flies up \$\endgroup\$
    – AAverin
    Commented Apr 25, 2014 at 3:09
  • \$\begingroup\$ are you familiar with quaternion slerp? \$\endgroup\$
    – nahano
    Commented Apr 25, 2014 at 17:25
  • \$\begingroup\$ No, just read about it. In library I use slerp looks like: public Quaternion slerp(Quaternion end, float alpha), where alpha is [0,1] range. Not sure how to apply this for smooth rotation though \$\endgroup\$
    – AAverin
    Commented Apr 26, 2014 at 5:27
  • \$\begingroup\$ Ok, reading more on lepr/slepr, looks like that 'alpha' is actually interpolation value, and the function yields rotation quaternion for current step. Thanks a lot, will try this out, should work. But still, would be interested to see a solution via AngularVelocity so the physics would work \$\endgroup\$
    – AAverin
    Commented Apr 26, 2014 at 6:55


You must log in to answer this question.

Browse other questions tagged .