キーを使用してキューブを回転したいとします。これはコードの一部です。 LEFTキーを押すと、キューブが左に回転します。私の目標はキューブを全周に回転させることです。そのため、問題の原因となるx
とy
軸で回転させる必要があります。キーを使用したオブジェクトの回転
私はmat4 rotation;
を定義し、キーを押したまま回転を割り当てるために使用しました。私はキーを保持すると、例えば左に回転しています。次に、キーを離し、オブジェクトが初期位置に戻ります(オブジェクトは移動していないので、カメラは元の位置に戻ります)。私はこの問題がキー機能の下に定義されているauto rotateMat = rotation;
行を引き起こしていると思います。 私は何が間違っていますか?
mat4 rotation; //global
if(keysPressed[GLFW_KEY_LEFT]){
timer -= delta;
rotation = rotate(mat4{}, timer * 0.5f, {0, 1, 0});
}
if(keysPressed[GLFW_KEY_RIGHT]){
timer += delta;
rotation = rotate(mat4{}, timer * 0.5f, {0, 1, 0});
}
if(keysPressed[GLFW_KEY_UP]){
timer += delta;
rotation = rotate(mat4{}, timer * 0.5f, {1, 0, 0});
}
if(keysPressed[GLFW_KEY_DOWN]){
timer -= delta;
rotation = rotate(mat4{}, timer * 0.5f, {1, 0, 0});
}
...
program.setUniform("ModelMatrix", rotation* cubeMat);
cube.render();
UPDATE:私はグローバル変数ではなくローカルとして行列変数を使用する場合
だから、これまで問題が解決しました。
キーが押されていない場合、回転は1つの行列になります。そう、はい、ユニティ・マトリックスでrotateMatをオーバーライドすると、キューブは元の位置に戻ります。 – BDL
@BDLどうすれば 'rotateMat'を上書きできないのですか?私は 'rotateMat'に' rotation'を割り当てると、最後の位置を覚えていると思いました。 – Ady96
たとえば、ifsの相対回転を計算し、それを現在の行列に掛けることができます。 – BDL