2016-10-01 12 views
0

私は、Minecraftの小さなテストモードを作っています。そこでは、プレーヤーが自由空間で小さな飛行機を飛行することができます。回転行列の逆順

はMinecraftのは、この設定で、しかし

glRotatef(pitch, 0, 0, 1); 
glRotatef(yaw, 0, 1, 0); 
glRotatef(roll, 1, 0, 0); 

としてカメラ変換を適用し、ロールはワールド空間でのピッチで平面の傾きを作ってしまい、ロールが適用された後、作っていない最後を、適用されます銀行は不可能です。

私はを注文することで、私はいくつかの方法、特定のロール、ヨーとピッチがあり

glRotatef(roll, 1, 0, 0); 
glRotatef(yaw, 0, 1, 0); 
glRotatef(pitch, 0, 0, 1); 

すなわち、逆の順序で変換を適用する必要があり、銀行の仕事をするためにことを考え出しました補正された値を元のMinecraftカメラ変換にプラグインして、同じ最終的な回転を実現します(基本的に、ワールド軸ではなく相対軸を使用してプレーンを回転させます)。

+0

できますが、あなたが望むものにはならない可能性があります。ロール・アンド・ヨー・アンド・ピッチの3つのパラメータを指定すると、ピッチ・アンド・ヨー・アンド・ロールの3つのパラメータが計算され、同じ向きになります。 – Beta

答えて

1

おそらく、カメラの回転をとにかく(四元数または回転行列のいずれかとして)別の表現で維持したいことがあります。このようにして、別の回転を追加するだけで、回転する軸を気にする必要はありません。それは常に正しく行われていれば、飛行機のローカル座標系内にあります。

表現を決定したら、これをオイラー角に変換することができます。 convert quaternions to Euler angles。あなたは角度の回転順序に注意する必要があります。いくつかのオプションがあるので、あなたの注文に合った変換が必要です。