Rotation, HPB & Quaternions



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 25/04/2007 at 06:00, xxxxxxxx wrote:

    User Information:
    Cinema 4D Version:   9.603 
    Platform:   Windows  ;   
    Language(s) :     C++  ;

    ---------
    There seems to be a problem with the Quaternion::SetMatrix() function.

    I'm writing a directX exporter and until now I used matrices to animate a model. Due to the limitations (gimbal lock) I switched to Quaternions.

    Now here's the problem:
    a cube with a rotation of 360° along the Y axis.
    Exporting the animation with a 4x4 Matrix -> everything is fine
    Exporting the animation with Quaternions -> everything is fine until the rotation is > 180° (pi).
    HPB Values higher than pi get a wrong sign in the quaternion which causes rotation to spin back very fast

    Has anyone experienced something similar?
    And are there solutions?

    Any help is greatly appreciated



  • THE POST BELOW IS MORE THAN 5 YEARS OLD. RELATED SUPPORT INFORMATION MIGHT BE OUTDATED OR DEPRECATED

    On 27/04/2007 at 04:12, xxxxxxxx wrote:

    After 2 days of comparing values and try and error I found the problem.

    To build my quaternion I used

    rotquat.SetMatrix(LHPBToMatrix(LV(dtRot)));

    But (of course) this doesnt work, because the "regular" Matrix brings the gimbal problem back.

    The correct way to do this is like this:

      
              Quaternion rotquat, rotquatX, rotquatY, rotquatZ;  
              //rotquat.SetMatrix(LHPBToMatrix(LV(dtRot)));  
              rotquatX.SetAxis(LVector(1, 0, 0), dtRot.y);  
              rotquatY.SetAxis(LVector(0, 1, 0), dtRot.x);  
              rotquatZ.SetAxis(LVector(0, 0, 1), dtRot.z);  
              //ZYX  
              rotquat = QMul(rotquatZ, QMul(rotquatX, rotquatY));  
    

Log in to reply