如何旋转 glm 相机

Posted

技术标签:

【中文标题】如何旋转 glm 相机【英文标题】:How do I rotate glm camera 【发布时间】:2018-01-08 05:03:22 【问题描述】:

我已经工作了几个星期来让我的 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));

_forvec3 在我正在寻找的方向。

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

proj 定义为

proj = glm::perspective(fov, aspect, 0.01f, 100.0f);

    这段代码并没有真正起作用,但我还是会包含它。

    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 结尾的常数,它会解决这个问题)。

如果有人可以提供帮助,将不胜感激。提前谢谢!

【问题讨论】:

您使用的是什么版本的 OpenGL,您正在使用着色器吗? 核心 3 版本。 请注意glm 标签指的是广义线性模型 - 请改用glm-math(已编辑) 【参考方案1】:

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

Issue with GLM Camera X,Y Rotation introducing Z Rotation

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

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

附:我不会删除此评论,因为与我处境相同的其他任何人都希望此评论有用。

【讨论】:

以上是关于如何旋转 glm 相机的主要内容,如果未能解决你的问题,请参考以下文章

绕轴旋转相机?

glm 旋转不根据模型的新方向

使用 GLM 正确旋转 Open GL 相机

相机 旋转

相机 旋转

相机 旋转