2017-11-05 29 views
3

작은 큐브로 가득 찬 "큐브"를 회전 시키려고 노력하고 있지만 그다지 좋지 않은 키보드를 사용하려고합니다.큐브를 중심에서 회전시키는 방법

회전의 피벗 점을 큰 "큐브"/ 중심의 가장 가운데로 설정하는 데 어려움을 겪고 있습니다. 이 video에서 볼 수 있듯이 큰 큐브의 전면 (초기)면의 중심이 지금 내 회전의 피벗 점이며, 조금 회전하면 혼란 스럽습니다.

큐브를 회전시키기 위해 키를 사용할 때 큐브의 초기면을 움직이는 것처럼 보입니다. 따라서 피벗 포인트는이 관점에서 괜찮지 만 내 코드에서 무엇이 잘못 되었습니까? 나는 왜 그것이 정면으로 움직이는 지 이해하지 못한다.

작은 큐브를 모두 생성하는 경우 3 for 루프 (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