什么是欧拉角Euler Rotations
Euler用来体现在3维空间中,物体的旋转。
计算主要分成三个轴上的旋转,分别是x轴的pitch,y轴的yaw,z轴的roll。
下面将分别演示,三个角各自的作用----暂时先不考虑XYZ轴的问题
- YAW(航空中被形象的称为偏航角)
2.PITCH(航空中被形象的称为俯仰角)
3.ROLL(航空中被形象的称为翻滚角)
如果要以XYZ轴的方向来表示,则要先确定坐标系
如果我们以Unity以及DerectX的左手坐标系为例
- X:右左
- Y:上下
- Z:内外
绕X轴转动就表示为我们的PITCH
绕Y轴转动就表示为我们的YAW
绕Z轴转动就表示为我们的ROLL
以上便是yaw pitch roll各自的特点
但在使用欧拉角的时候,会发生所谓的—万向锁(Gimbal lock)
为解决死锁问题,引入了四元数,下一篇再重点讲四元数的概念
- 万向锁的产生,是因为其中某个角选中了90度,导致其他两个角的旋转表现在此时变得一致,我们也由此失去了一个旋转维度。
那么为什么会出现这种情况呢
在我个人一开始的学习过程中,我始终以为欧拉角的旋转,无论按照哪个轴旋转,所有的轴都是跟着一同旋转的,但实际上,不是如此:
任意欧拉角的计算遵循某个计算次序,而计算次序,影响了轴与轴之间的旋转关系
那么计算次序有什么用呢?表现是什么样的呢?
欧拉角的表现形式,事实上是这样的
这是一个yaw-pitch-roll旋转次序模型
由上图可以看到
从外到里分别是
Y yaw
X pitch
Z roll
在这样到一个yaw-pitch-roll旋转次序的模型中
- 在yaw方向上的旋转,会带动pitch和roll一同旋转
- 在pitch方向上的旋转只会带动roll一起旋转
- roll的旋转与pitch和yaw无关,也就是roll旋转的过程中,pitch和yaw的方向不会有所改变。
因此,在模型旋转到下图所示位置时。
也就是pitch旋转了90度时,yaw和roll变为同向,无论变化yaw还是变化roll得到的效果是一样的
这就是我们所谓的万向锁(Gimbal Lock)