0

私は次のようなものを作ろうとしています-最新のOpenGLを使用してそれをフライトシミュレータと呼びましょう。ヨー、ピッチ、ロールを使用して平面オブジェクトを回転させようとしています。しかし、オブジェクトはグローバル座標系を中心に回転しているようです(つまり、オブジェクトがベクトル(0,0,1)に面している場合、ロール操作は正常に機能しますが、たとえば(1,0,0)に向けると、ピッチのように動作します)。

私の変換行列は次のように計算されます。

  transformation_matrix = perspective_projection_matrix *
                        camera_rotation_matrix *
                        camera_translation_matrix *
                        translation_matrix *
                        rotation_matrix *
                        scale_matrix;

回転行列は

rotation_matrix = rotation_z * rotation_y * rotation_x;

平行移動の前にローカル回転行列を追加しようとしましたが、さらに悪く見えます(オブジェクトは、常にデフォルトに面している空間内のあるポイントの周りを飛行するようになりました)

ローカル座標系でヨー、ピッチ、ロールを使用して、通常の平面のようなオブジェクトを回転させるにはどうすればよいですか?

編集

また、カメラの位置が(0,0,0)のグローバル座標系で回転が実行されていることにも気づきました 。そうではありません。

4

1 に答える 1

1

平面の方向は、最終的には、さまざまな軸を中心とした多くの個別の回転の連結になります。これは、単に個々の回転を合計することと同じではありません。それらは独立していません。

たとえば、ピッチを90度上げ、ロールを90度、次にピッチを90度下げると、結果の方向は90度のロールではなく、90度のヨーなります。

代わりに、平面の方向を表す永続的なマトリックスを保持し、必要に応じてロール、ピッチ、およびヨーの回転を適用します。

于 2013-03-01T14:18:53.873 に答える