Transforming Vectors and Points
Matrices and vectors of the same dimension can be multiplied directly:
V4d v; M44d m; V4d r = m * v; // matrix * vector -> vector
In order to multiply 3-dim vectors by a 4x4 matrix (which is often the case in computer graphics) you have to use one of the Transform methods provided by matrix types:
V3d p, v; M44d m; V3d a = m.TransformPos(p); // w-component assumed to be 1 (location) V3d b = m.TransformDir(v); // w-component assumed to be 0 (direction)
A Trafo3d is a Container for two M44d fields, a Matrix and its Inverse
Since it is often a lot easier to maintain the inverse of a matrix as opposed to computing the inverse as necessary, a special object that contains both, a matrix and its inverse, has been created. Thus a Trafo3d contains two M44d members, one called Forward, one called Backward .
Note also, that the multiplication of two M44d structs follows mathematical rules:
M44d m1; M44d m2; M44d m = m2 * m1; // transform first by m1, then by m2 !!!
whereas, the multiplication of two Trafo3d objects is defined differently:
Trafo3d t1; Trafo3d t2; Trafo3d t = t1 * t2; // transform first by t1, then by t2 !!!