分解变换的枢轴矩阵

时间:2014-03-04 18:07:40

标签: opengl math graphics matrix geometry

给定以下列方式组成的枢轴矩阵:

  mat4w pivotedMat(true);
  pivotedMat.translate(P);
  pivotedMat *= pivotPos;
  pivotedMat *= pivotRot;
  pivotedMat *= R;
  pivotedMat *= pivotRot.getInverse();
  pivotedMat *= pivotPos.getInverse();
  pivotedMat.scale(S);

然后由另一个矩阵翻译和旋转,以便:

mat4w newMat = transformMat * pivotedMat;

如果组成前一个旋转矩阵的所有值都已知,是否可以分解矩阵(newMat)以检索P,R和S的新值?

1 个答案:

答案 0 :(得分:0)

您可以使用以下代码将仿射变换矩阵T分解为翻译Pos和旋转Rot矩阵:

mat4 Rot;
mat4 Pos;
mat4 InvT = T.GetInversed();

for ( int i = 0 ; i < 3 ; i++ )
{
    for ( int j = 0 ; j < 3 ; j++ )
    {
        Rot[i][j] = InvT[j][i];
    }
}

Pos = Rot.GetInversed() * vec3( -InvT[3].x, -InvT[3].y, -InvT[3].z );