如何使用 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 围绕原点以外的点旋转对象?的主要内容,如果未能解决你的问题,请参考以下文章