如何旋转 glm 相机
How do I rotate glm camera
我已经工作了几个星期,让我的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结尾的常量,它会解决这个问题)。
如果有人能帮忙,将不胜感激。提前谢谢你!
好的,经过 4 个小时的寻找,我找到了解决方案,
GLM 相机 X,Y 旋转引入 Z 旋转的问题
这是指向另一个 glm 相机问题的链接。他们的问题是,那里的摄像机在做随机的杠铃滚动,而我的相机在向左看时没有俯仰。但是在复制他们的代码后,我发现它的解决方案无处不在,但是当您在那里的代码中分配新的向上向量时,请将其替换为glm::vec3(0.0f, 1.0f, 0.0f)
.我用一个变量做了这个,它对我来说工作得很好,还没有错误。
我不完全确定我自己为什么这个答案有效,但从我的猜测来看,当使用已经调整的变量分配变量时,它会慢慢产生数学错误。但是有一个具体的参考点,只需在 glm::lookAt 计算中使用调整后的向上变量就可以了。但是,如果有人可以更好地解释它,知道更好的解决方案,或者确切地知道它为什么有效,请告诉我。
附言我不会删除它,因为其他任何人,谁在我所处的情况下,希望会发现这个评论有用。
相关文章:
- 了解 GLM- openGL 中的相机转换
- OpenGl glm rotate
- OpenGL相机和相机空间转型的困惑
- OpenGL 和 GLM 矩阵无法正确扩展,总是按比例缩小
- 发布旋转矩阵(openGL/glm)
- 如何在 glRotatef 中使用 glm::mat4
- 如何使用按钮更新GTK3图像以使用C++从相机捕获图片
- 通过 API 控制 DJI 相机
- OpenGL 转换无法使用 GLM 矩阵
- 将相机数据从服务器实时流式传输到客户端
- 来自逆 vp 矩阵和相机位置的光线方向不正确
- OpenCV - Python 断言错误:SAD 算法 - 立体相机视差图计算
- Qt 和 Android - 如何使用 Qandroidjniobject 启动相机
- 在Windows(C++)中使用USB相机拍摄高分辨率照片
- 如何在相机类中添加胶卷
- 如何旋转 glm 相机
- 如何使用glm旋转3D相机
- glm::lookAt 垂直相机翻转时 z <= 0
- c++中的FPS相机可能使用glm:lookat
- GLM相机X,Y旋转引入Z旋转的问题