I think the fact they are called matrices is what trips most people up, they make themselves out to be a magical thing that can do all sorts, but really they are just a grid of numbers that provide a way of manipulating coordinates (why can't people just describe em like that). In mathematics you could describe a matrix having certain components preform things like carrying out a cosine calculation for example, but as it's more difficult to express that in programming, classes like the Matrix class provide special methods like CreateRotateZ and CreateLookAt that basically do those individual operations on certain components.

Take the example I showed in my last post, CreateRotateZ manually creates a standard identity matrix, performs Cos and Sin operations on two of the components, flips the sign of the input M12 component for the M22 output component, and passes the original value for M11 to the output M22. This in effect means a Matrix is actually not a magical piece of awesomeness, rather just a holder of a grid of information that needs manipulating.

Same again goes for multiplication, this is literally just an operator that has been created for the Matrix class that multiplies each component and returns the result, here have a look at how monoxna did it:

[source lang="csharp"]public static Matrix operator *(Matrix matrix1, Matrix matrix2){ Matrix result; result.M11 = matrix1.M11 * matrix2.M11 + matrix1.M12 * matrix2.M21 + matrix1.M13 * matrix2.M31 + matrix1.M14 * matrix2.M41; result.M12 = matrix1.M11 * matrix2.M12 + matrix1.M12 * matrix2.M22 + matrix1.M13 * matrix2.M32 + matrix1.M14 * matrix2.M42; result.M13 = matrix1.M11 * matrix2.M13 + matrix1.M12 * matrix2.M23 + matrix1.M13 * matrix2.M33 + matrix1.M14 * matrix2.M43; result.M14 = matrix1.M11 * matrix2.M14 + matrix1.M12 * matrix2.M24 + matrix1.M13 * matrix2.M34 + matrix1.M14 * matrix2.M44; result.M21 = matrix1.M21 * matrix2.M11 + matrix1.M22 * matrix2.M21 + matrix1.M23 * matrix2.M31 + matrix1.M24 * matrix2.M41; result.M22 = matrix1.M21 * matrix2.M12 + matrix1.M22 * matrix2.M22 + matrix1.M23 * matrix2.M32 + matrix1.M24 * matrix2.M42; result.M23 = matrix1.M21 * matrix2.M13 + matrix1.M22 * matrix2.M23 + matrix1.M23 * matrix2.M33 + matrix1.M24 * matrix2.M43; result.M24 = matrix1.M21 * matrix2.M14 + matrix1.M22 * matrix2.M24 + matrix1.M23 * matrix2.M34 + matrix1.M24 * matrix2.M44; result.M31 = matrix1.M31 * matrix2.M11 + matrix1.M32 * matrix2.M21 + matrix1.M33 * matrix2.M31 + matrix1.M34 * matrix2.M41; result.M32 = matrix1.M31 * matrix2.M12 + matrix1.M32 * matrix2.M22 + matrix1.M33 * matrix2.M32 + matrix1.M34 * matrix2.M42; result.M33 = matrix1.M31 * matrix2.M13 + matrix1.M32 * matrix2.M23 + matrix1.M33 * matrix2.M33 + matrix1.M34 * matrix2.M43; result.M34 = matrix1.M31 * matrix2.M14 + matrix1.M32 * matrix2.M24 + matrix1.M33 * matrix2.M34 + matrix1.M34 * matrix2.M44; result.M41 = matrix1.M41 * matrix2.M11 + matrix1.M42 * matrix2.M21 + matrix1.M43 * matrix2.M31 + matrix1.M44 * matrix2.M41; result.M42 = matrix1.M41 * matrix2.M12 + matrix1.M42 * matrix2.M22 + matrix1.M43 * matrix2.M32 + matrix1.M44 * matrix2.M42; result.M43 = matrix1.M41 * matrix2.M13 + matrix1.M42 * matrix2.M23 + matrix1.M43 * matrix2.M33 + matrix1.M44 * matrix2.M43; result.M44 = matrix1.M41 * matrix2.M14 + matrix1.M42 * matrix2.M24 + matrix1.M43 * matrix2.M34 + matrix1.M44 * matrix2.M44; return result;}[/source]

Ok there is a fair bit going on there, but again it's just a function that sets each component of the Matrix by using standard mathematics. Now the reason why I mentioned using the CreateLookAt method is because that specific method has been designed to make life easier for creating view matrices, also I doubt anyone want's to rewrite that method above every time they go to make a computer game lol.

Personally I am someone who needs to delve into the inner workings of something sometimes in order for me to understand why it works and how to use it, and if you are like me, I'd reccommend studying it, because just looking at the source code for monoxna is a eye opening way to learn this stuff. On the other hand there is lots more information out there about how to best use them, for further reading I'd suggest taking a read of the excellent extra reading tutorials provided by Riemer here:

http://www.riemers.net/eng/ExtraReading/matrices_geometrical.phpAimee