Euler Angle 以及 Gimble Lock

我们使用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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值