如何使用 glm::rotate 围绕原点以外的点旋转对象?

Posted

技术标签:

【中文标题】如何使用 glm::rotate 围绕原点以外的点旋转对象?【英文标题】:how can I rotate an object around a point other than the origin point with glm::rotate? 【发布时间】:2020-06-27 07:27:10 【问题描述】:

无论我的相机在哪里,我都试图让我的世界围绕我的相机旋转。我还没有做任何疯狂的数学,今年我要离开中学,我不知道四元数是什么。我的问题是,每次我对任何东西使用 glm::rotate 函数时,它只允许我在原点绕轴旋转,我找不到解决这个问题的方法。如果我遇到的这个问题有任何简单的答案,请让我知道如何围绕任何给定点旋转我的世界。谢谢

glm::mat4 look(1.0f);
float Rrotation;
Rrotation = 20.0f;
glm::vec3 the_axis_not_orientation(0.0f, 1.0f, 0.0f);

look = glm::rotate(look, Rrotation, the_axis_not_orientation);

【问题讨论】:

一种方法是进行平移,使旋转中心成为原点,围绕该原点旋转,然后将所有旋转点平移回来。数学并不难推导。 【参考方案1】:

你实际上做的是旋转模型:

model_view = look * rotate

如果要旋转视图,则必须交换矩阵的顺序。注意,矩阵乘法不是Commutative:

model_view = rotate * look

对于您的代码:

glm::mat4 rotate = glm::rotate(glm::mat4(1.0f), Rrotation, the_axis_not_orientation)
look = rotate * look; 

【讨论】:

以上是关于如何使用 glm::rotate 围绕原点以外的点旋转对象?的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL - 使用 glm 围绕 2 个轴旋转

旋转矩阵的问题(openGL/glm)[关闭]

GLM 旋转矩阵与预期结果不同

如何使用MATLAB围绕不是图像中心点的点旋转图像?

glm 旋转无法正常工作

在 GLM 旋转对象不再居中之后