使用 glm 根据光标位置旋转模型视图矩阵
Posted
技术标签:
【中文标题】使用 glm 根据光标位置旋转模型视图矩阵【英文标题】:Using glm to rotate the modelview matrix based on the cursor position 【发布时间】:2015-08-25 13:59:37 【问题描述】:我正在渲染一个对象的 3D 模型,我希望用户能够通过拖动鼠标来围绕该对象进行旋转。为此,我想使用光标位置来不断更新模型视图矩阵。
首先,我的模型视图矩阵是:
1 0 0 0
0 1 0 0
0 0 1 -100
0 0 0 1
所以相机正在观察物体的原点,距离它 100 个单位。假设鼠标现在移动到屏幕的右侧。这意味着我希望相机围绕对象旋转 - 例如 90 度。
为了计算新的模型视图矩阵,我采用单位矩阵,将其旋转 90 度,然后使用 glm::translate()
沿相机的 z 轴远离对象。
但是,我遇到的问题是glm::translate()
似乎相对于世界坐标系移动矩阵,而不是相机坐标系。因此,“沿相机的z轴远离物体”不成立,因为旋转后世界的z轴和相机坐标系不再对齐。
请有人解释我应该如何实现这一目标?
谢谢你:)
【问题讨论】:
【参考方案1】:一般来说,矩阵乘法是不可交换的。这意味着A*B != B*A
。
这意味着,当translate*rotate
沿全局轴移动时,rotate*translate
将沿局部轴移动。
请注意,在 OpenGL 和 glm 中,您必须以相反的顺序思考,因为向量是在矩阵之后编写的。 A*B*v
(A,B 矩阵, v 向量) 转换为首先应用矩阵 B,然后应用矩阵 A。
【讨论】:
以上是关于使用 glm 根据光标位置旋转模型视图矩阵的主要内容,如果未能解决你的问题,请参考以下文章