2012-03-24 10 views
3

私は軸を中心にキューブを回転させるようにしようと私がやっていることはあるんだ:OpenGLのglRotateとglTranslate順

glTranslatef(0.0f, 0.0f, -60.0f); 
    glRotatef(angle, 0.0f, 1.0f, 0.0f); 

私はそれが-60に移動し、y軸を中心に回転させるように期待してい円ではなく、-60度の角度で回転しているだけです。私がこのように書くとき:

glRotatef(angle, 0.0f, 1.0f, 0.0f); 
    glTranslatef(0.0f, 0.0f, -60.0f); 

私は何が必要なのですか?私はなぜそれを書くのですか? なぜ彼らは反対に向かっているのですか? 誰か説明できますか?

+1

行列乗算は可換ではありません... –

答えて

4

トランスフォームを適用すると、ローカルに適用されます。それをあなたが動いている座標系と考えてください。ビューを表す座標系から始まり、次にその座標系をその座標系に対して相対的に変換します。したがって、最初のケースでは、座標系を座標系のZ軸に沿って-60変換し、新しい原点で新しいY軸を中心に座標系を回転しています。描画したものは、その新しい座標系で描画されます。

これは、実際に使い慣れたトランスフォームについて考えるより簡単な方法です。 2つの別々の座標系、つまり変換が適用される座標系とジオメトリが描画される座標系の2つを考慮する必要はありません。

関連する問題