游戏中的玩家无论是通过鼠标控制人的移动也好,还是通过键盘来控制人的移动也好,都要涉及到方向,有了方向自然就会涉及到旋转。而四元数是控制旋转的一个不错的选择。但是关于四元数的理解很让人费解,至今我还是不能完全能够理解好。不过通过实践还算是总结出了了一些关于四元数的使用经验。我直接通过几个例子来讲解我对四元数的理解。
Quaternion quaTest( Radian(Degree(Real(90)).valueRadians()),Vector3::UNIT_Y );
Vector3 xAxis,yAxis,zAxis;
quaTest.ToAxes(xAxis,yAxis,zAxis);
这个例子很简单,首先我构造了一个围绕y轴旋转了90度的四元数。下面就是调用ToAxis函数,这个函数在ogre文档中的解释是转化到用三个vector3表示的矩阵。关于矩阵我表示我不是很理解。但是作为一个程序员我觉得没必要了解的太清楚(个人观点)。这里通过ToAxis函数得到的xAxis,yAxis,zAxis表示的是方向,而且都是单位化了的。接下来可能就是大家的容易在理解上进入误区的地方。得到的zAxis是什么东西?表示的哪个方向?你的结果是什么?先自己想想在往下看!
为了帮助大家理解,也为了我能够说清楚,我决定再举例说明。
假设在世界坐标系的中心我设置了一个摄像机,该摄像机的局部坐标系与世界坐标系完全的重合。此时如果我对该摄像机setOrientation(quaTest ),quaTest就是上面例子中的值。那么现在的摄像机应该是围绕y轴旋转了90度(摄像机的局部坐标系也就围绕y轴旋转了90度),此时摄像机的局部坐标的z轴与世界坐标系的x轴完全重合,而我们通过ToAxis函数得到的zAxis的值就是摄像机局部坐标系的z轴相对于世界坐标系的坐标值。我是按照右手坐标系来进行描述的。所以得到的zAxis值为(1,0,0),有的可能得到的有点误差,不过不影响。我想这样大家就能够很好的理解了吧。。。。
这篇帖子未完待续。。。。现在继续工作,有空接着写,如果还是不能明白我所说的,请加qq:237095598.