unity中的欧拉角
unity中欧拉角用的是heading - pitch -bank系统(zxy惯性空间旋转系统):
当认为旋转顺序是zxy时,是相对于惯性坐标系旋转。
当认为旋转顺序是yxz时,是相对于物体坐标系旋转。
另外一种常用的欧拉角系统是roll - pitch - yaw系统(zxy物体空间旋转系统),对于此系统:
当认为旋转顺序是zxy时,是相对于物体坐标系旋转。
当认为旋转顺序是yxz时,是相对于惯性坐标系旋转。
----
万向锁:
http://player.youku.com/player.php/sid/XNzkyOTIyMTI=/v.swf
----
如下图,将x轴作为y轴的子节点,将z轴作为x轴的子节点。那么此装置属于哪种欧拉角系统?
判断方法1:
假设对此系统按yxz的顺序进行旋转,则:
1,首先绕y轴旋转,子节点x,z轴会发生变化。
2,再绕x轴旋转,由于上一步中x已发生变化,所以是绕变化后的x轴旋转。由于z轴是x轴子节点,所以z轴发生变化。
3,再绕z轴旋转,由于前两步中z轴已发生变化,所以是绕变化后的z轴旋转。
由此可见,按yxz顺序旋转的话,每一步都是在上一步变化后的基础上进行旋转,即每一步都是相对于当前物体坐标系进行旋转,所以此系统是“yxz物体空间旋转系统”,即正是unity所采用的欧拉角系统。
判断方法2:
假设对此系统按zxy的顺序进行旋转,则:
1,首先绕z轴进行旋转,由于z轴是终端节点,所以x轴和y轴都不会发生变化。
2,再绕x轴进行旋转,由于x轴在上一步旋转中没有发生变化,所以就等价于绕惯性空间的x轴旋转。由于y轴是x轴父节点,所以y轴不会发生变化。
3,再绕y轴进行旋转,由于y轴在上一步旋转中没有发生变化,所以就等价于绕惯性空间的y轴旋转。
由此可见,按zxy顺序旋转的话,每一步都等价于相对于惯性坐标系进行旋转,所以此系统是“zxy惯性空间旋转系统”,即正是unity所采用的欧拉角系统。
----
下图列举出各种旋转顺序的“物体空间旋转系统”的万向锁情况:
可见,万向锁就是:在指定旋转顺序下,绕第二轴旋转正或负90至使一三两轴平行或反向平行,一三两轴成了等效轴,于是物体由原来的可绕三个轴旋转变为只能绕两个轴旋转,丢失了一个旋转自由度。
另外还还可以看到,当发生万向锁时,rotation所对应的欧拉角不唯一,如果一三两轴平行,则绕第一轴的旋转角A1和绕第三轴的旋转角A3之和不变即可保证rotation不变;如果一三两轴反向平行,则只要A1和A3之差不变,即可保证rotation不变。