先记结论:
当第二轴旋转±90°时会产生万向锁,万向锁只发生在程序中,现实世界不会发生。
发生万向锁的底层原因是由于程序中会指定旋转顺序,且前后顺序为父子包含关系。
①旋转顺序:因为同样一组数据,例如{X:10,Y:20,Z:30},不同的旋转顺序Z>X>Y \ X>Z>Y,最终得到的姿态是不一样的。
②父子包含关系:以Z>X>Y为例,Z轴旋转会影响XY轴,X轴旋转会影响Y轴,Y轴不影响其他轴。现实世界中,其中一轴旋转会带动另外两轴旋转,故不会存在一轴旋转,会使另外两轴发生重叠,形成万向锁。
以Unity为例,Inspector面板Rotation:[X:90 Y:10 Z:10],Unity默认旋转顺序为Z>X>Y。
Z轴为10,旋转10°,影响XY轴,带动XY轴旋转10°。
X轴为90,旋转90°,影响Y轴,带动Y轴旋转90°,此时Y轴与Z轴发生重叠。
Y轴为10,旋转10°,不影响其它轴。
在Unity中,当X轴=±90°时(因为Unity中X轴是第二旋转轴),此时不管怎么旋转ZY轴,都饶同一轴旋转。