昨天一同事说看了网上很多关于万向锁的文章还是没搞懂,让我解释一下~
我想不至于吧,我也到网上找了一些文章看, 发现解释的真是一塌糊涂,而且还是错误的~
欧拉旋转导致的万向锁应该很好理解的, 只要你理解欧拉旋转是有顺序的,欧拉旋转是有顺序
的,欧拉旋转是有顺序的,重要的事情说3遍。
那么在Unity里面的顺序是啥? 看文档啊~ 哈哈~
旋转的顺序是(z-x-y) ,一定要记住是(z-x-y),这是理解欧拉角的基础。
昨天我看了一篇Blog说是(y-x-z),真是扯,还说旋转是在惯性空间、模型空间,因为3次旋转不在同一个坐标空间,导致了旋转轴重合,导致万向锁,我的天呀~ 真能扯
看看Unity的提示,你能明白,旋转是相对于他的父节点的,就是他爸爸的坐标空间,3个轴旋转都在同一个坐标空间。
也许你会被一些假象迷惑,感觉是绕着模型空间在旋转的,我举个例子,下面的图看起来是绕着模型空间的z轴转的,其实不是的,他还是绕着父节点的z轴旋转的,也许你会问为啥??? 回到最开始说的,因为旋转是有顺序的,在Unity里面先旋转的永远是Z轴,初始的时候模型空间和他的父节点空间的坐标轴是重合的, 给人的错觉就是绕着模型空间在转。
万向锁来了,为了方便演示,我把立方体沿z轴方向的两个面染红了,可以看到旋转的面是红色的面。
最简单的万向锁是第二个旋转轴,旋转正负90度,在Unity第二个旋转轴是x轴,我们把x轴旋转90度,看看发生了什么,旋转面就跟父节点坐标的Y轴方向垂直了(没有父节点就是世界的坐标,看右上角的轴方向)。
接下来我们旋转y轴,你会发现此时y轴的旋转面也是红色的面,你会发现转y轴和z轴的旋转面试一样的,这个就是万象锁。
总结一下:
1. 旋转是有顺序的(z-x-y), 每次都是绕着父节点的坐标轴旋转。因为z轴是最先旋转的,所以看起来像是绕着模型空间的z轴旋转,你可能还是不太明白,你自己向我一样,在unity里面用立方体旋转,自己体会一下。
2. 每次的旋转都是从(0,0,0)开始的,并不是根据你在Inspector 里面填写的顺序来旋转的,很多人都以为只这样的,每一次的修改,都遵循(z-x-y)顺序,从(0,0,0)开始转