将绕任意轴的旋转解析为绕X、Y和Z轴的旋转

问题描述 投票:0回答:3

我目前正在尝试利用 GLUT 库在 OpenGL 中实现虚拟轨迹球。 截至目前,我正在通过对鼠标的新旧坐标进行标准弧球计算来计算旋转轴和旋转角度。但我想获得角度 theta1, theta2, theta3 ,这样物体绕 X 轴旋转 theta1 ,绕 Y 轴旋转 theta2 ,绕 Z 轴旋转 theta3 会产生与之前相同的效果。

c opengl rotation glut
3个回答
3
投票

你想要的是从轴角到三个欧拉角。查看维基百科旋转转换。在那里,您可以从轴角到四元数,然后到欧拉角,或者通过完整的 3x3 旋转矩阵。

另请参阅所谓的 Rodrigues 参数以帮助转换。首先绕 X 旋转,然后绕 Y,然后绕 Z 旋转,您想要这样做

RZ(t3)*RY(t2)*RX(t1)

在您的情况下,构建 3x3 旋转矩阵并使用 OpenGL 基于该矩阵转换模型视图可能会更容易,而不是 3 个顺序旋转。


3
投票

您想要的称为欧拉角,它是绕坐标轴旋转的三个角度(在您的情况下是 XYZ,或者可能是 ZYX?)。请务必注意要使用的正确约定(轴顺序),即适合您需要的约定。如果你搜索欧拉角计算公式,你会发现很多,但它们都会使用不同的约定(很多人认为他们的约定是标准,所以不要特别提及它,但没有通用的)标准)。

还要记住,欧拉角有很多缺点,例如万向节锁、模糊性和前面提到的约定混乱。因此,如果您有机会通过任意轴和角度(或者更好的是四元数)来表示旋转,那么您不应该混淆欧拉角。但尽管如此,在本文档中,您可以找到将欧拉角转换为所有 12 种约定的矩阵以及再转换回来的方法。轴角到矩阵的转换非常简单。


0
投票

完成这项工作的更好方法是将围绕穿过原点的轴的空间旋转转换为单位四元数。单位四元数可以很容易地转换为欧拉角,没有任何歧义。有关转换的更多信息可以在这里找到http://en.wikipedia.org/wiki/Conversion_ Between_quaternions_and_Euler_angles

感谢大家的帮助!

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.