Factoring the Translation
A 3D affine transform can be factored into a 3D linear transformation, folloed by a translation. Factoring the translation out of a matrix is trivial. Given a matrix \(M\), we want to factor it into \(M=TX\). \(T\) is going to be an identity matrix with the translation part of \(M\). \(X\) is going to be the same as \(M\), but with the translation part removed.
struct FactorTranslationResult {
Matrix T; // Translation
Matrix X; // Linear transformation
};
FactorTranslationResult FactorTranslation(Matrix M) {
FactorTranslationResult result;
result.T = Matrix4();
result.T[12] = M[12];
result.T[13] = M[13];
result.T[14] = M[14];
result.X = M;
result.X[12] = 0;
result.X[13] = 0;
result.X[14] = 0;
return result;
}