我们通常认为当前世界是一个三维的世界,用坐标系来表示就是XYZ,在3D游戏世界里也是用这样的三维坐标系来表示的。
X代表水平坐标,Y代表垂直坐标,Z代表的是由屏幕往里的一个深度坐标,也就是垂直于屏幕的坐标轴。
如下图,在一个3D世界里,绿色代表Y坐标,红色代表X坐标,而垂直于屏幕的蓝色是Z坐标。
这样在一个3D世界里面就可以方便的表示一个物体的位置信息和旋转信息。
那么什么是万向节锁?
其实就是一个物体在一个3D世界里面随着旋转顺序和旋转角度的改变,导致物体只能在一个固定的平面旋转,无法旋转到你预想的角度。
由于物体的旋转,物体的坐标轴方向也发生了改变,导致其中2条坐标轴发生了重合。
当你围绕着重合的坐标轴旋转时,物体的旋转方向始终在一个平面上旋转。
比如在Unity3D 中我们把一个物体按照先沿X轴旋转90度。
3D世界里面的人物沿X轴旋转了90度,人物的头看向了下方也就是Y轴的反方向。
此时物体的坐标轴也发生了改变,那么是哪个轴发生了改变呢?
可以自行想象一下。
其实只有Y轴发生了改变,由于物体围绕X旋转了90度,那么这个时候的Y轴也围绕X旋转了90度,也是和原来的Z轴重合了,原来的Y轴是由人物的脚指向头这个方向的,当人物围绕X轴旋转90度后。
Y轴还是按照由人物的脚的方向指向了头,也就刚好是垂直于屏幕的。
这样就导致了,当前的Y轴和原来的Z轴重合了。
这个时候你可能会想既然Y轴改变了,Z轴也会改变啊,原来的Z轴是从人物的身体由屏幕外指向屏幕里的,那么当物体围绕X轴旋转后,那么此时Z轴还是应该由人物的身体穿过人物的背面,也就是当前的绿色坐标轴。
按照我们的社会经验物体围绕X轴旋转90度后,Z轴和Y轴只是交换了位置而已啊。
但是其实在3D游戏世界里面不是这样去定义的。
而是按照陀螺仪的原理去解释的。
我们看下图,一个陀螺仪装置:
陀螺仪的装置非常简单,中间有一根竖轴,穿过一个圆盘。
圆盘称为转子,竖轴称为旋转轴。转子用金属制成,增加质量,从而增大惯性。竖轴外侧是三层嵌套的圆环,它们互相交叉,带来了三个方向自由度的旋转。
简单分解后就是如下图:
假如把绿色圆盘的转轴称作为Y轴,红色圆盘的转轴称作为X轴,蓝色圆盘的转轴称作为Z轴。
那么当绿色圆盘围绕它的转轴旋转时,并不会改变红色和蓝色旋转轴方向的变化。
当红色圆盘围绕着它的转轴旋转时,绿色圆盘的转轴方向发生了改变。
当蓝色的圆盘围绕着它的转轴旋转时,绿色和蓝色的转轴方向都发生了改变。
当红色圆盘围绕转轴旋转90度后
绿色圆盘的转轴和蓝色圆盘的转轴重合了,而红色圆盘的转轴方向并没有改变,这个时候就发生了万向节死锁现象。
绿色圆盘的旋转和蓝色圆盘的旋转都在同一个平面上旋转了,只要红色圆盘不发生改变,不管如何旋转绿色和蓝色圆盘都无法解除这种状态。
如在Unity3D中当把物体旋转围绕X轴旋转90度后。
把人物围绕Y轴再旋转40度后:
把人物围绕Z轴再旋转40度后:
我们发现物体不管是围绕Y轴还是Z轴旋转,都只是在一个平面旋转,而不是不同的平面了。
如果开始只把物体围绕X轴旋转89度的话,结果又会不同了。
欢迎关注公众号:理想的键盘。学习更多计算机知识