2014-02-18 50 views
0

我想根據它自己的空間(方向)而不是世界空間來移動矩陣。glm ::翻譯本地空間

具體而言,我想移動視圖矩陣/「相機」。

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是你想要的,但我不確定,因爲我儘量避免處理預VS後的乘法,就好像我的生命取決於它。

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;