.x的骨骼动画关于旋转部分,采用的是四元数存储。
即 w,x,y,z
可以认为w是旋转的角度 x,y,z是旋转轴
实际上它们有如下关系
w = cos(a);
x = sin(a) * Vx * i;
y = sin(a) * Vy * j;
z = sin(a) * Vz * k;
其中a为旋转角度,
Vn=(Vx, Vy, Vz) 为旋转轴
而i j k是四元数的三个维度,可以认为是虚部
有 i*i = -1, j*j=-1, k*k=-1 并有 i*j=-k, 任意两个的乘积都有类似的关系
四元数构造了一个代数上的巧合,即一个向量v与四元数(四元数的模为1)做乘法,得到的结果相当于把
v绕向量Vn=(Vx, Vy, Vz)在与Vn垂直的平面内旋转;
所有引擎都是这么定义旋转 q * v * q(-1) 这样可以保存模为1,但转了两倍的角度。
比想像中的要简单,网上也有很多论文推导了四元数旋转公式。
笔者将在后继简要整理说明四元数旋转的推导过程,