如何旋转 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));
_for
是vec3
在我正在寻找的方向。
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 相机的主要内容,如果未能解决你的问题,请参考以下文章