unity里面有三种旋转控制方式,矩阵控制旋转,四元数控制旋转和欧拉角控制旋转。
矩阵控制旋转因为添加了无畏的计算量而不推荐使用, 欧拉角是日常生活中描述旋转最多最好理解的方式, 但是unity提供的旋转api都是基于四元数的,这是为了规避欧拉角旋转带来的弊端:万向锁。

欧拉角的旋转机制

说万向锁之前先说一下,欧拉角旋转的机制,这个机制是理解万向锁的基础,我们以前可能会通过调节物体的rotation参数观察物体的旋转觉得自己了解了欧拉角的旋转机制。但是可能只是了解了一部分。没真正了解欧拉角的旋转机制,理解万向锁不会很容易。

unity的物体inspector面板的transform部分有rotation参数,是用欧拉角来表示的
[3D数学基础六]关于万向锁
这里的x对应的蓝色,y对应绿色,z对应蓝色,当调节x参数的时候,箭头会绕着蓝色圈代表的轨迹旋转,其他同理。
欧拉角的旋转是一层嵌套一层的,嵌套顺序可以任意,如图所示是z嵌套在x,x嵌套在y,这种嵌套关系使得最外层的旋转会影响内层的旋转。理论上欧拉旋转是可以很直观全面无死角的旋转物体。unity的inspector面板的rotation参数调节旋转采用的机制是这个机制。
[3D数学基础六]关于万向锁

万向锁发生的情况

理解了欧拉旋转的机制之后,假设嵌套关系如上图所示,这时物体的欧拉角是(0,0,0)。这时我将物体的z旋转90度。这时红圈就会和绿圈重合,此时红圈代表的x和绿圈代表的y的旋转轨迹是一致的,如下图所示。
此时unity里面调节物体的inspector面板的rotation的x和z, 物体的旋转轨迹是在同一个平面。这就是万向锁。

[3D数学基础六]关于万向锁

在unity中,最简单出现万向锁的机制是,先将物体的rotation调节到(90,0,0),然后这时调节y和z,会发现物体的旋转是围绕在同一个平面进行的,情况和上面描述的一样。

参考链接:
欧拉旋转
详解万向锁

相关文章:

  • 2021-11-29
  • 2022-02-20
  • 2021-09-01
  • 2021-05-20
  • 2021-06-29
  • 2021-09-14
  • 2021-08-05
猜你喜欢
  • 2021-08-26
  • 2021-09-23
  • 2021-05-12
  • 2021-08-09
  • 2022-02-10
  • 2021-06-22
相关资源
相似解决方案