我已经工作了几个星期让我的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
是{i} 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结尾的常数,它将解决这个问题。)
如果有人可以提供帮助,那将非常感激。提前谢谢!
答案 0 :(得分:1)
好的,经过4个小时的研究,我找到了一个解决方案,
Issue with GLM Camera X,Y Rotation introducing Z Rotation
这是另一个glm相机问题的链接。他们的问题是,相机正在进行随机的滚动滚动,而当我向左看时我没有投球。但是在复制了他们的代码后,我发现它的解决方案无处不在,但是当您在代码中指定新的向上向量时,将其替换为glm::vec3(0.0f, 1.0f, 0.0f)
。我用变量做了这个,它对我来说没有错误。
我不完全确定我理解为什么这个答案可以自己解决,但是当我使用已经调整过的变量分配变量时,我猜测正在发生什么。要慢慢创造数学错误。但是有一个具体的参考点,只是在glm :: lookAt计算中使用调整后的变量就可以了。但是,如果有人能够更好地解释它,知道一个更好的解决方案,或者确切知道它为什么有效,请告诉我。
P.S。我没有删除这个,因为其他任何人,我所处的情况,都希望这个评论有用。