1

前の質問に続いて、オブジェクトをクォータニオンで回転させることができましたが、まだ小さな問題があり、それを解決する方法がわかりません。以下のコードで、オブジェクトはx軸とy軸を中心に回転します。ただし、xキーとyキーを切り替えると、常に初期位置に戻ります。したがって、新しい位置からローテーションを取得することはありませんが、常にプログラムが開始された位置からローテーションを取得します。

Quaternion q1    = quaternion->quat_rotate(anglex,1,0,0);
Quaternion q2    = quaternion->quat_rotate(angley,0,1,0);
quaternion->mult(q1,q2);
quaternion->quat_matrix(Matrix);
glMultMatrixf(Matrix);
object->drawObject(Red,Green,Blue);

私の言いたいことをご理解いただければ幸いです。

4

1 に答える 1

1

しかし、xキーとyキーを切り替えると、常に最初の位置に戻ります。そのため、新しいポジションからローテーションを取得することはありませんが、常にプログラムが開始されたポジションからローテーションを取得します。

もちろんそうです。あなたのコードは、あなたが指示したことを正確に実行しています。あなたは何をするのかを示していQuaternion::mult(Quaterion&q1,Quaterion&q1)ませんが、クォータニオン インスタンスの内容を q1 と q2 の積で置き換えるのではないかと思います。現在の方向を q1*q2 で置き換えるのではなく、現在の方向を q1*q2 で乗算して新しい方向を取得する必要があります。

于 2011-10-29T16:34:10.910 に答える