opengl旋转的对象不居中

Posted

技术标签:

【中文标题】opengl旋转的对象不居中【英文标题】:opengl rotated object not centered 【发布时间】:2013-05-01 11:48:15 【问题描述】:

我正在学习现代 opengl(3.3),而 atm 我正在创建自己的 mvp 矩阵。 我只是有一些奇怪的问题,当我尝试旋转世界时,我的相机似乎没有围绕中心旋转。 这是一个以原点为中心的三角形的图像,同时旋转。 http://postimg.org/image/5l4k4cjqz/

这些是我的矩阵:

glm::mat4 model = glm::mat4(1.0);
glm::mat4 view = glm::lookAt( glm::vec3(0.0, 0.0, 5.0),
                              glm::vec3(0.0, 0.0, 0.0), 
                              glm::vec3(0.0, 1.0, 0.0) );
glm::mat4 projection = glm::perspective(45.0f, 1024.0f / 768.0f, 0.1f, 100.0f);
glm::mat4 xRotation = glm::rotate( glm::mat4(1.0f), this->xAngle, glm::vec3(1.0, 0.0, 0.0) );
glm::mat4 yRotation = glm::rotate( glm::mat4(1.0f), this->yAngle, glm::vec3(0.0, 1.0, 0.0) );
glm::mat4 zRotation = glm::rotate( glm::mat4(1.0f), this->zAngle, glm::vec3(0.0, 0.0, 1.0) );
glm::mat4 mvp = projection * view * model * xRotation * yRotation * zRotation;

当我从 mvp 矩阵中移除投影矩阵时,它将围绕中心旋转。

PS:有没有更好的方法来做旋转,我可以把它放在视图矩阵中吗?

【问题讨论】:

“旋转你的世界”是什么意思? 好吧,我不是在旋转模型矩阵,所以我不是用 *Rotation 矩阵旋转世界吗? 不,你不是。不清楚你在这里想要达到什么效果。 从技术上讲,您不是在旋转模型或世界矩阵,而是在旋转对象本身,然后应用模型矩阵。由于在您的情况下 model==1 并不重要。你的三角形的坐标是多少?通常,使用欧拉旋转时,旋转顺序是 xyz,因此您可能希望反转应用旋转矩阵的方式。 对不起,我是图形编程的初学者。我不想在世界上四处走动。所以我应该能够“环顾四周”。这就是我试图用旋转矩阵做的事情。 @AndreasHaferburg:真正的 triangleVerts[] = -1.0, -1.0, 0.0, 1.0, -1.0, 0.0, 0.0, 1.0, 0.0, 【参考方案1】:

如果相机位于 c 处,并且您想围绕枢轴点 p 旋转它,您必须首先将相机平移 d = p - c,然后旋转,然后将其平移回来 -d。我对glm不熟悉,所以这里只是伪代码。

viewMatrix = translationMatrix(-d) * rotationMatrix * translationMatrix(d)

【讨论】:

以上是关于opengl旋转的对象不居中的主要内容,如果未能解决你的问题,请参考以下文章

如何仅旋转特定对象而不影响opengl中的其他对象?

OpenGL 对象不转换为旋转轴

opengl 围绕固定轴旋转对象

OpenGL:物体旋转异常

在 OpenGL 上单击鼠标时无法旋转和更改对象的颜色

在OpenGL中围绕特定点旋转对象