使用glm根据光标位置旋转模型视图矩阵

时间:2015-08-25 13:59:38

标签: opengl matrix graphics linear-algebra glm-math

我正在渲染一个对象的3D模型,我希望用户能够通过拖动鼠标来旋转该对象。为此,我想使用光标位置不断更新模型视图矩阵。

首先,我的模型视图矩阵是:

1 0 0 0
0 1 0 0
0 0 1 -100
0 0 0 1

因此相机正在查看物体的原点,并且距离它100个单位。让我们说鼠标现在移动到屏幕的右侧。这意味着我希望相机围绕物体旋转 - 例如90度。

为了计算新的模型视图矩阵,我采用单位矩阵,将其旋转90度,然后使用glm::translate()沿着摄像机的z轴远离物体。 / p>

然而,我遇到的问题是glm::translate()似乎相对于世界坐标系而不是相机坐标系移动矩阵。因此,"沿着相机的z轴移动物体"不成立,因为世界的z轴和相机坐标系在旋转后不再对齐。

请有人解释我应该如何实现这个目标?

谢谢:)

1 个答案:

答案 0 :(得分:0)

通常,矩阵乘法不是可交换的。这意味着A*B != B*A

对你而言,这意味着,当translate*rotate沿着全局轴移动时,rotate*translate将沿着本地轴移动。

注意,在OpenGL和glm中你需要以反向顺序思考,因为向量是在矩阵之后写的。 A*B*v(A,B矩阵,v向量)转换为首先应用矩阵B,然后应用矩阵A.