最近在学习Unity,刚好学到API里四元数的这一章节,花了一天研究了复数和向量的各种数学计算问题,迷迷糊糊搞懂了四元数,也理解了欧拉角会产生万向锁这一现象的原理。
(有兴趣深入理解四元数的同学,可以看看这个网站(http://www.qiujiawei.com/understanding-quaternions/))
有事没事搞搞Unity,创建几个Cube玩玩,无意间被我发现了Unity-Scene面板里对物体的旋转也存在着万向锁现象。
可以通过对物体Inspector面板的Transform-Rotation参数和物体坐标系的转换来实现万向锁现象。
1.首先,随便拉进来一个Cube作为测试,这个时候坐标为(Local自身坐标)
2.在Cube的Inspector面板上修改Transform-Rotation-x为-90(即让该物体围绕x轴逆时针旋转90度),这时候你就会发现,在(Local自身坐标)下,蓝色的Z轴这个时候是朝向上方,而相应的绿色的Y轴朝向你的左方。
(不知情的人可能还不知道,万向锁已经产生了)
3.这个时候,将坐标系改变为(Global世界坐标系),确实,(Global世界坐标系)的Scene面板里的x、y、x轴的方向的永远不会变的,y轴仍然指向上方。
4.但此时,你可以通过物体的Inspector面板上修改Rotation的Y和Z的值,你可以发现,无论是修改Y的值还是修改Z的值,物体总是围绕垂直于【天地间】的y轴进行转动----------------这就是传说中的万向锁。
5.个人经过实验并揣测,Transform面板Rotation的Y控制的是(Global世界坐标系)的y轴,而Z控制的是(Local自身坐标)的z轴。
当 --巧合的(Global世界坐标系)的y轴 与 (Local自身坐标)的z轴 同时指向一个方向的时候,就会出现万向锁现象。
然而(Global世界坐标系)的y轴的方向是始终不变的,并且经过很多实验发现 x轴无论怎么改变也不会有万向锁现象。
总结:
Local坐标 :z轴 (由Inspector面板Transform-Rotation-Z控制)
Global坐标 :y轴 (由Inspector面板Transform-Rotation-Y控制)
Inspector面板Transform-Rotation-X控制的具体是啥我也不太清楚。。。。。。GG。。。。没实验出来,若有大神见过此贴,懂得其中的缘由或者发现我的缺漏错误之处,请及时指出来!本人定查缺补漏!!