【发布时间】:2016-02-03 19:46:14
【问题描述】:
我正在尝试使用 glm::gtc::matrix_transform::rotate: 围绕 X 轴创建一个旋转矩阵:
glm::rotate(glm::mat4f(1.0f), glm::radians(90.f), glm::vec3f(1.f, 0.f, 0.f));
我希望得到的矩阵是(删除平移偏移):
1, 0, 0
0, cos(90), -sin(90)
0, sin(90), cos(90)
0, 0, 0
(参见例如https://en.wikipedia.org/wiki/Rotation_matrix#Basic_rotations)
但是,结果略有偏差,即:
1, 0, 0
0, 0.9996240, -0.0274121
0, 0.0274121, 0.9996240
0, 0, 0
我查看了https://github.com/g-truc/glm/blob/master/glm/gtc/matrix_transform.inl,果然,该实现使用了一个奇怪的因子 c + (1 - c) 来解释结果。
我现在的问题是,为什么?为什么glm的旋转矩阵定义不一样?其背后的理论是什么?
【问题讨论】:
-
glm不使用“奇数因子”,它使用众所周知的公式来围绕任意轴(其在选择特定轴时的基础旋转)。请注意,通用公式在您已经链接的同一篇维基百科文章中给出。完全不清楚你在做什么,我无法用 glm 重现这种效果。
标签: opengl 3d rotation glm-math