如何从矩阵中删除变换

问题描述 投票:0回答:1

我有一个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的效果。

我该怎么做?

c++ opengl glsl glm-math
1个回答
0
投票

总之,您可以简单地乘以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提供强制转换运算符,以轻松发挥全部性能。

© www.soinside.com 2019 - 2024. All rights reserved.