glm ::用本地空间翻译

时间:2014-02-18 22:29:58

标签: opengl matrix glm-math

我想根据它自己的空间(方向)而不是世界空间来移动矩阵。

具体来说,我想移动视图矩阵/“相机”。

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平移。怎么办呢?

1 个答案:

答案 0 :(得分: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);

你的视图矩阵的预乘法也可能是你想要的,但我不确定,因为我试图避免必须处理前期和后期乘法,好像我的生命依赖于它。

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;