2009-03-26 13 views
1

私のモデルを自力で回転させる方法を教えてもらえますか?デフォルト(0,0,0)軸の代わりに重力がかかるのですか?OpenGL回転の問題

と私の回転が唯一の左と右のない360度を行くことのようです。..

答えて

10

あなたはその中心の周りにオブジェクトを回転させたい場合は、まず原点にそれを翻訳する必要があり、その後、回転させ、それを翻訳バック。変換行列は右から左へベクトルに影響するため、これらのステップを逆の順序でコーディングする必要があります。

PushMatrix(); 
LoadIdentity(); // Start with a fresh matrix 
Translate();  // Move your object to its final destination 
Rotate();  // Apply rotations 
Draw();   // Draw your object using coordinates relative to the object center 
PopMatrix(); 

これらの行列が適用されます::

v_t = (I * T * R) * v = (I * (T * (R * v))) 

だから順序は次のとおりです。回転、平行移動、私は心でOpenGLのルーチンを知らないので、ここで

は、いくつかの擬似コードです。


EDIT:上記の式の説明。

変換、回転、スケール、および変換は、モデルビューマトリックスに影響します。モデルのすべての3Dポイント(ベクトル)にこの行列を乗算して3D空間内の最終点を取得し、投影行列を乗算して2D点を受け取ります(2D画面上)。

投影ものを無視すると、モデルビュー行列で形質転換あなたの点である:モデルビュー行列MV乗じ原点vを意味

v_t = MV * v 

。上記のコードで

、我々は単位行列I、翻訳Tと回転RMVを構築した:

一緒にすべてを置く
MV = I * T * R 

、あなたはあなたのポイントvが第一の回転の影響を受けていることがわかりRの場合はTとなりますので、翻訳する前にポイントを回転させてください。

v_t = MV * v = (I * T * R) * v = T * (R * v) 

回し()を呼び出すことになる)(翻訳前に:悪いだろう

v_t = (I * R * T) * v = R * (T * v) 

:3Dでいくつかのポイントに変換し、モデル内のいくつかの奇妙な歪みをもたらし、原点を中心に回転。

+0

ありがとう! しかし、方程式はどういう意味ですか? – noob88

+0

私は方程式の説明を追加しました。実際には、3Dグラフィックスを理解するために必要な非常に基本的な数学です。 –

+0

ありがとうございました。 まだ残っている問題が1つあります。180度ではなく、180度回転しています。何が間違っているのかわからないのですか? – noob88