矩阵旋转,有4种情况。
- 绕X轴旋转
- 绕Y轴旋转
- 绕Z轴旋转
- 绕任意轴旋转
首先,给出通常的算法。
typedef union
{
float m[16];
struct
{
float
m0, m1, m2, m3,
m4, m5, m6, m7,
m8, m9, m10, m11,
m12, m13, m14, m15;
};
}
Matrix4;
static void MultiplyMM(Matrix4* left, Matrix4* right, Matrix4* outMatrix4)
{
outMatrix4->m0 = left->m0 * right->m0 + left->m4 * right->m1 + left->m8 * right->m2 + left->m12 * right->m3;
outMatrix4->m1 = left->m1 * right->m0 + left->m5 * right->m1 + left->m9 * right->m2 + left->m13 * right->m3;
outMatrix4->m2 = left->m2 * right->m0 + left->m6 * right->m1 + left->m10 * right->m2 + left->m14 * right->m3;
outMatrix4->m3 = left->m3 * right->m0 + left->m7 * right->m1 + left->m11 * right->m2 + left->m15 * right->m3;
outMatrix4->m4 = left->m0 * right->m4 + left->m4 * right->m5 + left->m8 * right->m6 + left->m12 * right->m7;
outMatrix4->m5 = left->m1 * right->m4 + left->m5 * right->m5 + left->m9 * right->m6 + left->m13 * right->m7;
outMatrix4->m6 = left->m2 * right->m4 + left->m6 * right->m5 + left->m10 * right->m6 + left->m14 * right->m7;
outMatrix4->m7 = left->m3 * right->m4 + left->