Ich möchte einen Würfel mit Schlüsseln drehen. Dies ist ein Teil des Codes. Wenn ich die LINKE Taste drücke, dreht sich der Würfel nach links usw. Mein Ziel ist es, den Würfel rundum zu drehen, also muss ich ihn um x
und y
drehen, was ein Problem verursacht.Objekt-Rotation mit Tasten
Ich habe mat4 rotation;
definiert und verwendet, um eine Drehung zuzuweisen, wenn ich eine Taste gedrückt halte. Wenn ich den Schlüssel halte, dreht er sich, zum Beispiel nach links. Dann lasse ich den Schlüssel los, und das Objekt kehrt in die Ausgangsposition zurück (die Kamera kehrt in die Ausgangsposition zurück, da sich das Objekt nicht bewegt). Ich denke, dass dieses Problem die Linie auto rotateMat = rotation;
verursacht, die unterhalb der Schlüsselfunktionen definiert wird. Was mache ich falsch?
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:
Also das Problem dieses Problem gelöst wurde, als ich Matrix Variable als globale Variable verwendet, nicht lokal.
Wenn keine Taste gedrückt wird, ist die Drehung eine Einheitsmatrix. Ja, das Überschreiben von rotateMat mit einer Unity-Matrix führt dazu, dass Ihr Cube in seine ursprüngliche Position zurückkehrt. – BDL
@BDL also wie konnte ich 'rotateMat' nicht übersteuern? Ich dachte, wenn ich 'rotation' zu' rotateMat' zuweise, wird es sich an die letzte Position erinnern. – Ady96
Sie können zum Beispiel eine relative Drehung in den ifs berechnen und sie mit Ihrer aktuellen Matrix multiplizieren. – BDL