Gimbal Lock (万向节锁/常平架锁)是指在欧拉角描述的旋转过程中,一条旋转轴和另外一条旋转轴重合,导致丧失一个旋转自由度的现象。
在使用欧拉角描述的三维旋转中,存在预定的三条绝对旋转轴(用世界坐标给定),通过预定的顺序先后绕三条旋转轴旋转一定角度,得到一个最终朝向。例如,可以约定将右手系坐标系的坐标轴作为旋转轴,并且以X轴--> Y轴--> Z轴的顺序进行旋转。在这个约定下,如果物体绕Y轴旋转了90°(或-90°),那么物体绕X轴的旋转跟绕Z轴的旋转的效果是一样的,这就导致了一个旋转自由度的丧失,即出现了Gimbal Lock。
Gimbal Lock并没有表明欧拉角是“错误”的。欧拉角是一种简单直观的描述方式,有其有武之地。例如,对于静态的物体,可以通过欧拉角来设定其朝向:图4中的朝向,虽然在Y=90°的条件下无法从初始朝向旋转而来,但可以通过其它一组(x,y,z)旋转值取得,或者通过更改欧拉角旋转的次序而取得。又例如,在第一人称射击游戏里,镜头一般只有“抬头、低头”和“左看、右看”这两组动作,而没有“歪头看”的动作,也就是说镜头只会绕两条轴旋转,这种情况下不会出现Gimbal Lock。但是,对于绕三个轴动态自由旋转的物体,用欧拉角就不合适了,这时用轴角表示法(Axis Angle),矩阵或者四元数(Quaternion)可以避免Gimbal Lock。注意,通过欧拉角来生成矩阵或四元数依然会导致Gimbal Lock,要避免这种现象,必须通过矩阵或四元数自身的旋转特性进行计算。 附一则关于Gimbal Lock的视频讲解:
|