我一直在研究在OpenGL中实现滚转,俯仰和偏航式旋转的问题已有一段时间了,在线提供的相关材料有限。问题的关键是在物体旋转时找到更新的局部轴。例如,围绕X旋转会导致局部Y轴和Z轴发生变化。随后的旋转将围绕更新的轴。我找到了一些数学公式来找到更新的向量:
http://nehe.gamedev.net/article/camera_class_tutorial/18010/
然而,新矢量以点的形式给出,例如,围绕Y轴旋转45度改变X轴,X轴现在通过点(0.71,0,0.71)。现在的问题是如何找到可以传入glRotatef(angle,x,y,z)的(x,y,z)点。请注意,x,y,z位于通过它们和原点的矢量上。
我正在考虑对通过(0.71,0,0.71)和原点的直线进行法线处理,然后再采用法线来得到(x,y,z)。
有人可以建议对此进行改进,还是替代方法?
答案 0 :(得分:1)
我建议你使用四元数。一开始在概念上有点难以理解,但一旦掌握了它的要点,实施就非常简单。此外,四元数旋转可以避免万向节锁定:)
OpenGL Quaternion教程网站:
http://www.opengl-tutorial.org/intermediate-tutorials/tutorial-17-quaternions/