Unity 欧拉角万向节锁的原理

  • Post author:
  • Post category:其他


网上文章很多,有些写的很详细,但是我个人理解起来有不是很顺畅,把几个重要的知识点整理一下


欧拉角

:欧拉角用于控制物体的旋转角度,在Unity中欧拉角的表示就是一个Vector3,例如  Vector3 v3 = new Vector3(30,30,30)

Unity的欧拉角

旋转顺序

是 Z-X-Y,这个旋转顺序在不同的软件,行业有所不同,没有一个全球统一标准。


旋转顺序

:同样的输入值,不同的旋转顺序,得到的结果不同


静态欧拉角

:旋转的参考坐标系保持不变(Space.World),这种情况不产生万向节锁


动态欧拉角

:旋转的参考坐标系为物体自身的局部坐标系(Space.Self),特定情况下会产生万向节死锁


万向节死锁



中间旋转顺序轴(X)

旋转90°,使前顺序轴(Z)和

世界坐标系

的后顺序(Y)轴重叠,这样在世界坐标系的观察空间内,物体绕自己的Z轴旋转,就跟物体绕着世界坐标系的Y轴旋转一样,这样看物体坐标的Z轴自由度似乎消失了,这种情况就称为万向节死锁。

欧拉角存在多对一的关系,即物体的最终旋转情况,可以用多个欧拉角来表示,例如 Vector3(90,30,30) 等价于 Vector3(90,20,20)

且慢,我刚刚,看到一个跟规定不符合的情况,Uniyt的旋转顺序似乎是 Y-X-Z !!!!!!为什么大家都说是Z-X-Y啊??

如果是Y-X-Z,我就不会困惑那么久了啊!!!

我用文字表达一下:首先物体初始角度是Vector3(0,0,0),此时局部坐标世界坐标相同,假设要旋转的欧拉角是Vector3 v3 = new Vector3(90,30,60),我们来分析一下过程,以世界坐标系的角度来看到物体旋转。先绕v3.y旋转30°,因为此时局部坐标和世界坐标重合,所以你看到物体绕着世界坐标的Y轴旋转,接着绕v3.x旋转90°,旋转后,局部坐标的Z轴和世界坐标的Y轴重合,接着绕着v3.z旋转,从世界坐标系来看就像是绕着Y轴旋转,这样一来,局部坐标的Z轴旋转似乎不起作用,似乎Z轴的自由度消失了!万向节死锁产生了!

简单描述产生过程:Y-X-Z,一开始Y旋转就是世界坐标Y旋转,X旋转90°后,局部坐标系Z和世界坐标系Z重合,局部坐标系Z旋转看起来就是世界坐标系Y旋转

Over



版权声明:本文为PresleyGo原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。