1

OpenGL でクォータニオンを使用してオブジェクトを回転させていますが、5 度から -5 度に回転すると (単位平面を横切る)、モデルが「遠くまで」回転するという問題があります。つまり、平面全体で 10 度ではなく、5 から -5 まで 350 度全体を回転させます。これは、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]);

助言がありますか?

4

1 に答える 1

2

問題はクォータニオンや glRotate() ではなく、回転のステップ距離を計算する場所です。

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

于 2011-12-08T11:46:08.307 に答える