Euler Angle 以及 Gimble Lock

    技术2022-05-12  0

    我们使用Euler角主要是因为他简单:使用3个数字就可以表示一个3D空间的方向。但是他有很多问题:

    1。一个3D空间的Orientation具有3个自由度只使用3个数字来表示会产生aliasing 的现象。其中一个就是Gimble Lock

    2。我们必须制定一个规则来定义

      - 旋转复合顺序

      - 哪个方向为正向旋转角度

      - 参考哪一个旋转轴

     

    3。一个Orientation不能通过唯一的一个Euler角组来定义:多个不同的组合会定义同一个方向

    4。Interpolation十分困难

     

    -----------------------------------------------------------------------------------------------------------------

    所以我们使用一个固定的复合顺序(HPB):Heading * Pitch * Bank  *Vertex_In_Object_Space

    来将一个模型空间的顶点转换到世界空间

     

    Heading 描述了一个相对于垂直方向的旋转

    Pitch 描述了一个在Horizon上面的旋转

    Bank 也叫做Twist是绕之物体自身的轴旋转

     

    我们使用右手系所以使用Right Hand Rule来定义哪个方向的旋转为正旋转(CCW)

     

    所有的旋转参考轴都是Object's Axis而不是世界坐标的轴

     

    所有的角度都在确定的范围

     - Heading [ -PI, +PI ]

     - Pitch [ -PI/2, +PI/2 ]

     - Bank [ -PI, +PI ]

     

     

    而Gimble Lock 则是当第二个旋转为 +/-PI 的时候发生的。 在这时候第一个旋转轴同第三个旋转轴重合。

    这时候对第三旋转轴的任何旋转都变为对第一个垂直轴的旋转。

     

    出现的问题:

    例如我们使用照相机来观察一个飞机。如果飞机的方向是我们的照相机产生了Gimble Lock。那么随后飞机相对于第三个轴上角度的变化将无法跟随。

     

     

     

    参见:3D Math Primer for Graphic and Game Development

    http://blog.csdn.net/kesalin/archive/2008/03/09/2161254.aspx

     


    最新回复(0)