【问题标题】:glm::translate with local spaceglm::translate 与本地空间
【发布时间】:2014-02-18 22:29:58
【问题描述】:

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

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

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 平移。如何做到这一点?

【问题讨论】:

    标签: opengl matrix glm-math


    【解决方案1】:

    如果你想操纵相机位置,你应该存储相机位置,只在需要时才将其放入视图空间。

    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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-11
      • 1970-01-01
      相关资源
      最近更新 更多