绕Y轴旋转矩阵
这里看到-sinθ在左下角,和z,x轴的旋转不一样(他们在左上角),我们来看看为什么。
看看各个轴的关系:x=cross(y,z),z=cross(x,y),y=cross(z,x)。
以下以左手坐标系为例子(右手坐标是一样的):
zb = r cos(α + φ) = r cos α cos φ - r sin α sin φ,
xb = r sin(α + φ) = r sin α cos φ + r cos α sin φ.
因为 za = r cos α
xa = r sin α
代入上式得:
xb = xa cos φ + za sin φ.
zb = za cos φ - xa sin φ = - xa sin φ + za cos φ
所以得到了rotateY的矩阵。
绕任意轴旋转
我们定义三个相互正交的向量uvw组成的正交矩阵是,该矩阵乘以任意uvw空间中的向量得到的是xyz空间下的向量。
例如:
那么该矩阵的逆矩阵(正交矩阵的逆矩阵等于转置矩阵),乘以xyz坐标系的向量得到uvw空间下的向量
那么如果我们绕一个向量w旋转φ角度,相当于把输入向量转到uvw空间下的w向量,然后构建绕z轴旋转φ的矩阵,再转回xyz空间下:
当w向量确定后,可以利用up(0, 1, 0)向量确定uv两个向量。
u = cross(up, w),v = cross(w, u)