2011-12-08 3 views
1

私はOpenGLでオブジェクトを回転させるためにクォータニオンを使用していますが、5度から-5度(単位平面を横切る)に回転させると、長い道のり。すなわち、飛行機を横切って10度ではなく、5度から-5度まで350度回転します。これは、0度で回転することによっていつでも "通過"するたびに、各軸の回転に起こります。どのように修正するかはわかりません。OpenGLで0に回転する

私のコードは、ロール、ピッチおよびヨーは、オイラーは私のオブジェクトの回転のために角度表し、この、次のようになります。

quaternion[0] = cos(pitch/2)*cos(yaw/2)*cos(roll/2) + sin(pitch/2)*sin(yaw/2)*sin(roll/2); 
quaternion[1] = sin(pitch/2)*cos(yaw/2)*cos(roll/2) - cos(pitch/2)*sin(yaw/2)*sin(roll/2); 
quaternion[2] = cos(pitch/2)*sin(yaw/2)*cos(roll/2) + sin(pitch/2)*cos(yaw/2)*sin(roll/2); 
quaternion[3] = cos(pitch/2)*cos(yaw/2)*sin(roll/2) - sin(pitch/2)*sin(yaw/2)*cos(roll/2); 
glLoadIdentity(); 
glPushMatrix(); 
glRotatef((float) (2.0f * acos(quaternion[0]) * 180.0f/PI), quaternion[1], quaternion[2], quaternion[3]); 

任意の提案ですか?

答えて

2

問題は四元数やglRotate()ではなく、回転のステップ距離を計算する場所です。

-5のような負の角度が0..359の範囲の値に「修正」されるような正規化を使用している可能性があります。したがって、355になり、回転は5から355まで実行されます。