# Matrices

Hi folks

First question:

I have a float[16] matrix named matrixA. Now I am searching for the matrix named matrixB. This:

glMultMatrixf(matrixA);

should be the same as:

How do I get the second matrix (the one first loaded).

Second question:

Is there somewhere a tutorial how to translate and rotate without OpenGL with float[16] matrices which I can load later with glLoadMatrixf? Till know I used float[3][3]s (only rotation), but they are not supported by OpenGL and I want to put the translation into the matrix now too.

Does somebody know a question

as far as the first question i have no clue.

as for the second, this hopefully will explain the math and give the idea behind coding what you need.
http://www.geocities.com/SiliconValley/2151/matrices.html

glMultMatrixf(matrixA);

should be the same as:

That means B*A==I.

BA == I - Remove A from left side by multiplying with A^-1, on both sides, to the right
B
AA^-1 == IA^1
B == A^-1

So, there’s your unknown matrix. matrixB is the inverse of matrixA.

For your own rotation matrices, there’s no difference with OpenGL’s 4x4 matrices. It’s well explained in no-one’s link above. But in short, if you have your rotation matrix like this

[ a d g ]
[ b e h ]
[ c f i ]

then just pad with some extra zeros and ones. This 4x4 matrix will do the same thing, and is perfectly valid in OpenGL.

[ a d g 0 ]
[ b e h 0 ]
[ c f i 0 ]
[ 0 0 0 1 ]

Thanks no-one and Bob, both questions are answered. But now a new question to no-one:
http://www.geocities.com/SiliconValley/2151/matrices.html
shows how to use float[4][4] matrices. Can I simply do this:

or are the x and y values then in the wrong order? Do I first have to do this:

for(i = 0; i < 4; i++)
for(j = 0; j < 4; j++)
mat16[(i << 2) + j] = matrix[i][j];

or this (other order)?:

for(i = 0; i < 4; i++)
for(j = 0; j < 4; j++)
mat16[(j << 2) + i] = matrix[i][j];