3D游戏世界里的万向节锁

http://www.fgreen.org/?p=906
我觉得解释的最清楚的一片文章,如果看了还不懂,自己面壁去吧。
————————————————————————————————————————————

3D游戏世界里的万向节锁

我们通常认为当前世界是一个三维的世界,用坐标系来表示就是XYZ,在3D游戏世界里也是用这样的三维坐标系来表示的。

X代表水平坐标,Y代表垂直坐标,Z代表的是由屏幕往里的一个深度坐标,也就是垂直于屏幕的坐标轴。

如下图,在一个3D世界里,绿色代表Y坐标,红色代表X坐标,而垂直于屏幕的蓝色是Z坐标。
3D游戏世界里的万向节锁_第1张图片这样在一个3D世界里面就可以方便的表示一个物体的位置信息和旋转信息。

那么什么是万向节锁?

其实就是一个物体在一个3D世界里面随着旋转顺序和旋转角度的改变,导致物体只能在一个固定的平面旋转,无法旋转到你预想的角度。

由于物体的旋转,物体的坐标轴方向也发生了改变,导致其中2条坐标轴发生了重合。

当你围绕着重合的坐标轴旋转时,物体的旋转方向始终在一个平面上旋转。

比如在Unity3D 中我们把一个物体按照先沿X轴旋转90度。
3D游戏世界里的万向节锁_第2张图片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游戏世界里面不是这样去定义的。

而是按照陀螺仪的原理去解释的。

我们看下图,一个陀螺仪装置:
3D游戏世界里的万向节锁_第3张图片陀螺仪的装置非常简单,中间有一根竖轴,穿过一个圆盘。

圆盘称为转子,竖轴称为旋转轴。转子用金属制成,增加质量,从而增大惯性。竖轴外侧是三层嵌套的圆环,它们互相交叉,带来了三个方向自由度的旋转。

简单分解后就是如下图
3D游戏世界里的万向节锁_第4张图片假如把绿色圆盘的转轴称作为Y轴,红色圆盘的转轴称作为X轴,蓝色圆盘的转轴称作为Z轴。
那么当绿色圆盘围绕它的转轴旋转时,并不会改变红色和蓝色旋转轴方向的变化。
当红色圆盘围绕着它的转轴旋转时,绿色圆盘的转轴方向发生了改变。
当蓝色的圆盘围绕着它的转轴旋转时,绿色和蓝色的转轴方向都发生了改变。
当红色圆盘围绕转轴旋转90度后3D游戏世界里的万向节锁_第5张图片绿色圆盘的转轴和蓝色圆盘的转轴重合了,而红色圆盘的转轴方向并没有改变,这个时候就发生了万向节死锁现象。

绿色圆盘的旋转和蓝色圆盘的旋转都在同一个平面上旋转了,只要红色圆盘不发生改变,不管如何旋转绿色和蓝色圆盘都无法解除这种状态。

如在Unity3D中当把物体旋转围绕X轴旋转90度后。

把人物围绕Y轴再旋转40度后:
3D游戏世界里的万向节锁_第6张图片把人物围绕Z轴再旋转40度后
3D游戏世界里的万向节锁_第7张图片我们发现物体不管是围绕Y轴还是Z轴旋转,都只是在一个平面旋转,而不是不同的平面了。

如果开始只把物体围绕X轴旋转89度的话,结果又会不同了

你可能感兴趣的:(图形图像)