2014-02-18 4 views
0

월드 스페이스가 아닌 자신의 공간 (방향)에 따라 행렬을 이동하고 싶습니다.glm :: translate with local space

특히보기 행렬/"카메라"를 이동하고 싶습니다.

glm::mat4x4 view = glm::lookAt(glm::vec3(1.1f, 1.3f, 1.2f), 
            glm::vec3(0.0f, 0.0f, 0.0f), 
            glm::vec3(0.0f, 1.0f, 0.0f)); 

view=glm::rotate(view, r, glm::vec3(0,1,0)); 
view=glm::translate(view, glm::vec3(x,y,z)); 

번역은 회전의 무시 같다,하지만, 카메라가 직면 위치에 따라 예를 번역하고 싶습니다 카메라가 x 축을 향하고 z를 변환 할 때 x 축을 따라 변환해야합니다. 어떻게 할 수 있습니까?

답변

0

카메라 위치를 조작하려면 카메라 위치를 저장하고 필요할 때만보기 공간에 배치해야합니다.

glm::mat4 camera = glm::inverse(glm::lookAt(
           glm::vec3(1.1f, 1.3f, 1.2f), 
           glm::vec3(0.0f, 0.0f, 0.0f), 
           glm::vec3(0.0f, 1.0f, 0.0f))); 
camera = glm::rotate(camera, r, glm::vec3(0,1,0)); 
camera = glm::translate(camera, glm::vec3(x,y,z)); 
glm::mat4 view = glm::inverse(camera); 

그것은 당신의 뷰 행렬의 사전 multiplcation을하는 것은 당신이 원하는 것을 수도 있습니다,하지만 난 내 인생이 달려있는 것처럼 포스트 곱셈 대 사전 처리하는 것을 피하려고하기 때문에 나는 불확실 해요 .

glm::mat4 view = glm::lookAt(
           glm::vec3(1.1f, 1.3f, 1.2f), 
           glm::vec3(0.0f, 0.0f, 0.0f), 
           glm::vec3(0.0f, 1.0f, 0.0f))); 
view = glm::rotate(glm::mat4(), r, glm::vec3(0,1,0)) * view; 
view = glm::translate(glm::mat4(), glm::vec3(x,y,z)) * view;