我目前正在尝试利用 GLUT 库在 OpenGL 中实现虚拟轨迹球。 截至目前,我正在通过对鼠标的新旧坐标进行标准弧球计算来计算旋转轴和旋转角度。但我想获得角度 theta1, theta2, theta3 ,这样物体绕 X 轴旋转 theta1 ,绕 Y 轴旋转 theta2 ,绕 Z 轴旋转 theta3 会产生与之前相同的效果。
您想要的称为欧拉角,它是绕坐标轴旋转的三个角度(在您的情况下是 XYZ,或者可能是 ZYX?)。请务必注意要使用的正确约定(轴顺序),即适合您需要的约定。如果你搜索欧拉角计算公式,你会发现很多,但它们都会使用不同的约定(很多人认为他们的约定是标准,所以不要特别提及它,但没有通用的)标准)。
还要记住,欧拉角有很多缺点,例如万向节锁、模糊性和前面提到的约定混乱。因此,如果您有机会通过任意轴和角度(或者更好的是四元数)来表示旋转,那么您不应该混淆欧拉角。但尽管如此,在本文档中,您可以找到将欧拉角转换为所有 12 种约定的矩阵以及再转换回来的方法。轴角到矩阵的转换非常简单。
完成这项工作的更好方法是将围绕穿过原点的轴的空间旋转转换为单位四元数。单位四元数可以很容易地转换为欧拉角,没有任何歧义。有关转换的更多信息可以在这里找到http://en.wikipedia.org/wiki/Conversion_ Between_quaternions_and_Euler_angles。
感谢大家的帮助!