Search code examples
opengl3d-rendering

Understanding OpenGL Matrices


I'm starting to learn about 3D rendering and I've been making good progress. I've picked up a lot regarding matrices and the general operations that can be performed on them.

One thing I'm still not quite following is OpenGL's use of matrices. I see this (and things like it) quite a lot:

x y z n
-------
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1

So my best understanding, is that it is a normalized (no magnitude) 4 dimensional, column-major matrix. Also that this matrix in particular is called the "identity matrix".

Some questions:

  • What is the "nth" dimension?
  • How and when are these applied?

My biggest confusion arises from how OpenGL makes use of this kind of data.


Solution

  • The short answer that might help you get started is that the 'nth' dimension, as you call it, does not represent any visualizable quantity. It is added as a practical tool to enable matrix multiplications that cause translation and perspective projection. An intuitive 3x3 matrix cannot do those things.

    A 3d value representing a point in space always gets 1 appended as the fourth value to make this trick work. A 3d value representing a direction (i.e. a normal, if you are familiar with that term) gets 0 appended in the fourth spot.