키를 사용하여 큐브를 회전하고 싶습니다. 이것은 코드의 일부입니다. 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 : I 글로벌 변수, 로컬하지 행렬 변수를 사용하는 경우에 따라서이 문제가 해결되었다
.
키를 누르지 않으면 회전이 단위 행렬이됩니다. 그래서 예, 단위 행렬로 rotateMat를 오버라이드하면 큐브가 원래 위치로 돌아갑니다. – BDL
@BDL 어떻게'rotateMat'을 무시할 수 있습니까? 나는 rotateMat에'rotation'을 할당했을 때 마지막 위치를 기억할 것이라고 생각했습니다. – Ady96
예를 들어 if의 상대 회전을 계산하여 현재 행렬에 곱할 수 있습니다. – BDL