欧拉角演示程序

  1836人阅读  评论(0)  收藏  举报

用欧拉角可以很方便直观的表示方位的变换,他的三个参数(head,pitch,roll),分别表示三个方向的变换,如head变就相当于摇头,pitch就相当于点头。roll相对与侧头
欧拉角优点:
   1.容易使用,很直观,容易理解
   2.表示占用很少空间,只需要3个float,而matrix表示需要9个float
   3.任何有效数字都是有效的(都能表示一个有效的方向偏移),不像matrix 需要满足一些条件
欧拉角缺点:
   1.对一个给定的方位,可以有多种不同的欧拉角表示方法。(详见 3d math prime for graphic and game programing 156页)
       这会给编程带来很大的不方便,最简单的例如给某一个方向上的偏移加上360度,还有一个更麻烦的例如 pitching down 135° is the same as heading 180°,
          pitching down 45°, and then banking 180°.
    2. Gimbal Lock:我们把第二个参数(pitch)设为+- 90度的时候,将会导致第一个和第三个参数在同一个方向上偏移。
   3.在两个欧拉角之间插值很麻烦 (详见3dmath.... 157页)。
//对欧拉角,附件中提供了一个很形象的描述,见"欧拉角1.jpg",“欧拉角1.bmp”中描述了如何根据欧拉角构造相应的矩阵

欧拉角的旋转都是基于local space的,在自己推导公式的时候有一点需要注意的是,欧拉角表示的旋转是针对“space”的,而对space的变换跟对point的变化恰好是一个逆过程,由于我们需要的
是一个对point的变换矩阵,所以可以在用公式推导时把角度取反,例如pitch (绕x轴旋转)30度,就可以按照-30度来推导公式。

我的博客中有一个欧拉角的演示程序,以及Irrlicht中欧拉角推导公式的演示
 1. 通过实验可以发现D3DXMatrixRotationYawPitchRoll 是按照RotZ * RotX * RotY顺序来实现的,这个跟d3d文档中描述的
  roll pitch yaw 的处理顺序正好相反,可以设置任意角度,然后在,之间切换,会发现结果总是一样的。
 2. Irrlicht中的处理方式跟D3D不一样,它不是一个RollPitchYaw的欧拉角,而是简单按照xyz的顺序处理,分析公式或者比较
  g_iWayToRotate =4的处理都可以发现,它的处理结果等于RotX * RotY * RotZ,可以设置任意角度,然后在,之间切换,
  会发现结果总是一样的。

 

Irrlicht中对欧拉角的使用可以参考inline CMatrix4<T>& CMatrix4<T>::setRotationRadians( const vector3d<T>& rotation )函数

 

http://download.csdn.net/source/1690319 这里是程序下载链接

你可能感兴趣的:(欧拉角演示程序)