如何旋转 glm 相机

How do I rotate glm camera

本文关键字:glm 相机 旋转 何旋转      更新时间:2023-10-16

我已经工作了几个星期,让我的glm相机旋转,但无济于事。我尝试了不少不同的方法。第一个是我用过的最好的相机。如果有人可以向我解释我哪里出错了,以及如何解决它,谢谢!

1 - 问题 - 如果我看,在我的肩膀上,也就是向左 90 度并尝试向上看它不会。

void addRotation(const glm::vec3 rot) {
_for = glm::rotate(_for, rot.x, glm::vec3(0,1,0));
_for = glm::rotate(_for, rot.y, glm::vec3(1,0,0));
}

_for是我所看方向的vec3

glm::mat4 getViewProj() { return proj * lookAt(_pos, _pos + _for, _up); }

proj定义为

proj = glm::perspective(fov, aspect, 0.01f, 100.0f);
  1. 这段代码并没有真正起作用,但我还是会包含它。

    void addRotation(const glm::vec3 rot) {
    glm::mat4 rx = glm::rotate(glm::mat4(1.0f), rot.x, glm::vec3(0,1,0));
    glm::mat4 ry = glm::rotate(glm::mat4(1.0f), rot.y, glm::vec3(1,0,0));
    _for = rx * ry; //_for was a mat4, everything else was the same
    }
    

如果在第一种方法上尝试过+=,但我只是数学错误,因为小数点基本上是无穷大(尽管如果我添加一个以0结尾的常量,它会解决这个问题)。

如果有人能帮忙,将不胜感激。提前谢谢你!

好的,经过 4 个小时的寻找,我找到了解决方案,

GLM 相机 X,Y 旋转引入 Z 旋转的问题

这是指向另一个 glm 相机问题的链接。他们的问题是,那里的摄像机在做随机的杠铃滚动,而我的相机在向左看时没有俯仰。但是在复制他们的代码后,我发现它的解决方案无处不在,但是当您在那里的代码中分配新的向上向量时,请将其替换为glm::vec3(0.0f, 1.0f, 0.0f).我用一个变量做了这个,它对我来说工作得很好,还没有错误。

我不完全确定我自己为什么这个答案有效,但从我的猜测来看,当使用已经调整的变量分配变量时,它会慢慢产生数学错误。但是有一个具体的参考点,只需在 glm::lookAt 计算中使用调整后的向上变量就可以了。但是,如果有人可以更好地解释它,知道更好的解决方案,或者确切地知道它为什么有效,请告诉我。

附言我不会删除它,因为其他任何人,谁在我所处的情况下,希望会发现这个评论有用。