1、绕坐标轴旋转的公式:
(1)绕Z轴旋转
(2)绕X轴旋转
(3)绕Y轴旋转
以上的矩阵变换公式为 : P' = P * mat;
2、绕任意轴旋转的公式:
给定具有单位长的,则物体绕OA轴旋转变换的矩阵表示可确定如下:
3、绕任意轴旋转在Ogre中实现
Ogre::Matrix3 I = Ogre::Matrix3::IDENTITY;
Ogre::Matrix3 A = I, B = I, M = I;
// (x,y,z) 是任意轴旋转到坐标原点的方向向量
A[0][0] = x * x; A[0][1] = x * y; A[0][2] = x * z;
A[1][0] = y * x; A[1][1] = y * y; A[1][2] = y * z;
A[2][0] = z * x; A[2][1] = z * y; A[2][2] = z * z;
B[0][0] = 0; B[0][1] = -z; B[0][2] = y;
B[1][0] = z; B[1][1] = 0; B[1][2] = -x;
B[2][0] = -y; B[2][1] = x; B[2][2] = 0;
M = A + (I - A) * Ogre::Math::Cos(angle) + B * Ogre::Math::Sin(angle);
M = M.Transpose();
// Trans is translate matrix
Ogre:: Matrix4 result = Trans.inverse() * Ogre::Matrix4(M) * Trans;
4、Ogre中实现注意的问题
上述公式中的矩阵式按行表示的,而Ogre中的矩阵是按列表示的,因此最终的公式需要变化一下,即