给定以下列方式组成的枢轴矩阵:
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的新值?
答案 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 );