一直对于欧拉角的万向锁问题没有真正的理解,今天看书又看到了万向锁,所以今天一定要把它理解了。
主要参考了这篇文章:http://blog.youkuaiyun.com/huazai434/article/details/6458257
有两种类型的欧拉角旋转:
静态: 即绕世界坐标系三个轴的旋转,由于物体旋转过程中坐标轴保持静止,所以称为静态。
动态:即绕物体坐标系三个轴的旋转,由于物体旋转过程中坐标轴随着物体做相同的转动,所以称为动态。
简单说静态就是按照世界坐标轴进行旋转的,世界坐标轴的指向不随着物体的旋转而改变,所以称之为静态。
动态是按照物体本身的物体坐标轴旋转的,物体旋转过程中物体坐标轴的指向会改变,所以称为动态。
静态旋转不会有万向锁的问题,动态旋转会产生万向锁。
我一直以来没有理解万向锁是因为我脑海里一直想物体旋转怎么会出现问题呢,三个方向旋转互不干涉,不会出问题啊。问题就出在了一直在想而没有动手试试。。。
首先将手机平放在桌子上,我们假设z轴与手机屏幕垂直(手机平放于桌面)指向上方,手机较短的一条边为x轴,较长的一条边为y轴(方向由手机尾部指向头部)。(注意旋转顺序为zyx)。
绕z轴旋转任意角度(注意x和y轴也跟着一起旋转),再绕y轴旋转90°,再绕x轴旋转任意角度。通过多次尝试,你会发现一个共同点:z轴永远是水平的,通俗的说,手机与桌面一直是贴着的(手机的窄面)!本来我们以为手机会指向任何方向,但实际上手机好像是被锁在桌面上,只能指向水平的某个方向,这个现象就称为万向锁。
如果还是没有理解的话,你可以想想绕x轴旋转意味着什么,意味着手机应该与桌面有一定的角度,但是按照上面z轴和y轴旋转后发现,绕x轴旋转任何角度手机都不会与桌面有角度。
关于UE4 的Transform 坐标和旋转都是相对世界坐标进行的,而缩放是相对物体坐标进行的。 这里的旋转就是上面提到的静态欧拉角。