2017-11-05 14 views
3

私は小さなキューブでいっぱいの "キューブ"を回転させようとしています。キューブを中心からどのように回転するか

私は回転のピボット点を大きな「立方体」/世界の中心に設定するのに苦労しています。このvideoからわかるように、大きな立方体の正面(初期)面の中心が私の回転のピボット点になります。これは少し回転させると少し混乱します。

キューブを回転させるためにキーを使用しているときに、キューブの最初の面を移動しているように見えます。したがって、ピボットポイントはこの観点からは大丈夫かもしれませんが、私のコードで何が間違っていますか?なぜ私はキューブ全体が中心ではなく、正面で動いているのか分かりません。

すべての小さな立方体を生成する場合、私は3つのループ(x、y、z)の関数を呼び出し、関数はcubeMatを返すので、ビデオで見られるようにすべての立方体を生成します。回転自体については

cubeMat = scale(cubeMat, {0.1f, 0.1f, 0.1f}); 
cubeMat = translate(cubeMat, {positioning...); 

、左回転の短い例は次のようになります。

mat4 total_rotation; //global variable - never resets 
mat4 rotation;  //local variable 

if(keysPressed[GLFW_KEY_LEFT]){ 
      timer -= delta; 
      rotation = rotate(mat4{}, -delta, {0, 1, 0}); 
} 
... //rest of key controls 
total_rotation *= rotation; 

もこれですサイクルのため、これらの3の内部:

program.setUniform("ModelMatrix", total_rotation * cubeMat); 
cube.render(); 

私は読んだことがあります私はtransformationを使用してピボットポイントを中央に設定する必要がありますが、この場合、ピボットポイントをワールドの中心にある小さなキューブの内側に設定するにはどうすればよいですか?そのキューブは明らかにx=2, y=2, z=2です。サイクルでは、x=0で始まるキューブを生成するからです。

+0

キューブセンターについてのビデオの回転はありません。 –

+0

私はそれをあまりよく説明しなかったかもしれません、申し訳ありません。世界の真ん中を「回転」していますが、何らかの理由でキーボードのコントロールが正面を動かすか、コントロールを使って、正面を持ってキューブを回転させているように見えます。 – Ady96

+0

申し訳ありませんが、私はあなたが言うことを得ようとしていません。私はビデオを数回見ましたが、私は奇妙なことは何も見えません。 –

答えて

5

右乗算によって回転行列を累積しています。このようにして、すべての回転は、以前のすべての変換から得られたローカル座標系で実行されます。そして、これはあなたの右回転が(ローカル座標系の右回転であるため)上回転後に順番に結果をもたらす理由です。

しかし、回転をグローバル座標系にしたいとします。したがって、単純に乗算順序を元に戻してください。

total_rotation = rotation * total_rotation; 
+0

ああ、私はそれがとても簡単だろうとは思わなかった。ありがとう – Ady96

関連する問題