Archived

This topic is now archived and is closed to further replies.

Matrix Clarification Needed

This topic is 5819 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Ok, ive looked at too many websites each telln me a different way to interpet an array representing a 4x4 matrix!! (im all cross-eyed now) I need clarification: I guess i know opengl uses "column/row" order, but as far as array access, im screwy. If I declare in a matrix class an array like so... float matrix[16]; Is the following the correct representation of this array: m0 m4 m8 m12 m1 m5 m9 m13 m2 m6 m10 m14 m3 m7 m11 m15 and... Rotation of X Axis = (m0, m1, m2) Rotation of Y Axis = (m4, m5, m6) Rotation of Z axis = (m8, m9, m10) Translation = (m12, m13, m14) and... (m3, m7, m11, m15) = (0, 0, 0, 1) What is confusing me is the order of the array. If i dont have the order correct, my rotations will be all wacked. But this should be a simple question for those that have created there own matrix class.

Share this post


Link to post
Share on other sites
I haven''t been looking so much into GL matrices, but since you''re making a float array[16] the order comes out like this:

m0, m1, m2, m3,
m4, m5, m6, m7,
m8, m9, m10,m11,
m12,m13,m14,m15.


You just need to make a conversion function:
//Before you try this example, just try to copy your
// matrix right into the GL matrix and see what happends,if
//that worked then great! If not, try this conversion.

float myMatrix[16];
GLMATRIX glMatrix; //i dunno how they''re initialized


glMatrix.m0 = myMatrix[0];
glMatrix.m1 = myMatrix[4];
glMatrix.m2 = myMatrix[8];
glMatrix.m3 = myMatrix[12];

glMatrix.m4 = myMatrix[1];
glMatrix.m5 = myMatrix[5];
glMatrix.m6 = myMatrix[9];
glMatrix.m7 = myMatrix[13];

glMatrix.m8 = myMatrix[2];
glMatrix.m9 = myMatrix[6];
glMatrix.m10 = myMatrix[10];
glMatrix.m11 = myMatrix[14];

glMatrix.m12 = myMatrix[3];
glMatrix.m13 = myMatrix[7];
glMatrix.m14 = myMatrix[11];
glMatrix.m15 = myMatrix[15];

//There you have it
//You direct copy like this:

glMatrix.m0 = myMatrix[0]
glMatrix.m1 = myMatrix[1]
glMatrix.m2 = myMatrix[2]
glMatrix.m3 = myMatrix[3]
...
...
...
and so on..

//Gee, I wonder why it''s called DIRECT copy =D
//Anyway, check these out and come back if neither is
//successfull.


Js

Share this post


Link to post
Share on other sites
Thats why I dont wanna do conversion!! I wanna make sure that I order my array the way that opengl is.

I just cant find a sight that CLEARLY STATES WHICH WAY IT IS.

...which is why I want someone whos made a matrix class with a float matrix_array[16].....ugg!

Share this post


Link to post
Share on other sites
Yes. Your matrix is arrayed properly for openGL.

I think I remember an extension that lets you switch the orientation of the matrices so you can do float matrix[4][4]; and have it work, but it''s a little foggy and not worth getting into.

Share this post


Link to post
Share on other sites
I agree about the matrix[4][4] approach, since the operations in C++ will be ack-basswards. Which is also why I posted since i DO SEE a lot of examples which do use the [4][4] approach. Thanks for the post though.

Share this post


Link to post
Share on other sites