2014-03-04 60 views
1

鑑於被以下述方式構成的樞軸矩陣:分解轉化的樞軸矩陣

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

您可以用下面的代碼分解仿射變換矩陣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);