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; }