我有一个Transfromation矩阵,它是其他三个变换矩阵的组合。
glm::mat4 Matrix1 = position * rotation * scaling;
glm::mat4 Matrix2 = position * rotation * scaling;
glm::mat4 Matrix3 = position * rotation * scaling;
glm::mat4 transMatrix = Matrix1 * Matrix2 * Matrix3;
如果以后再想从transMatrix中删除Matrix1的效果。
我该怎么做?
总之,您可以简单地乘以Matrix1的逆:
glm::mat4 Matrix2And3 = glm::inverse(Matrix1) * transMatrix;
操作顺序很重要,如果要删除Matrix3,则需要使用transMatrix * inverse(Matrix3)。如果是Matrix2,则需要删除matrix1(或3),然后删除matrix2。
但是],应该不惜一切代价避免矩阵求逆,因为它效率很低,并且对于您的情况是可以避免的。
您所说的矩阵实际上只是一个3D姿势:位置+旋转+大小。假设您使用的是均匀缩放(大小=浮点),则您的Pose的mat3分量即正交矩阵,这些类型的矩阵具有特殊的属性,即:
Inverse(O)==转置(O)
[计算矩阵的转置比逆计算要简单得多,这意味着您可以执行以下操作,以达到相同的结果,但是要更快] ::
mat4 inv = (mat4)transpose((mat3)Matrix1); inv[3] = glm::vec4(-position1, 1.0f); mat4 Matrix2And3 = inv * transMatrix;
如果您想走得更远,我建议您创建Pose类并为mat4和mat3提供强制转换运算符,以轻松发挥全部性能。