PDA

View Full Version : OGLs Matrix layout



Diapolo
11-21-2002, 10:33 AM
OK, I have got a problem in finding out, which is the correct Matrix layout in OpenGL (or better the native one?).

All of my Matrix functions use the following layout:

[ 1][ 2][ 3][ 4]
[ 5][ 6][ 7][ 8]
[ 9][10][11][12]
[13][14][15][16]

And are declared as:
float fMatrix[16];

The index of the element is simple element - 1.

If I query OGL for the Modelview Matrix, the translations are in the elements 13, 14 and 15.

What confuses me is that the layout, mentioned in the redbook is like that:

[ 1][ 5][ 9][13]
[ 2][ 6][10][14]
[ 3][ 7][11][15]
[ 4][ 8][12][16]

The Matrix is declared like mine is:
float fMatrix[16];

Perhaps thatīs a beginner question (sorry then), but Iīm confused now http://www.opengl.org/discussion_boards/ubb/smile.gif.

Diapolo

Bob
11-21-2002, 10:44 AM
It's all about how you see it. Choose the layout you feel most comfortable with, but make sure you create your matrix library thereafter.

For example, a translation matrix in OpenGL looks like this,



1 0 0 x
0 1 0 y
0 0 1 z
0 0 0 1

where the elements are indexed like this,



1 5 9 13
2 6 10 14
3 7 11 15
4 8 12 16

As you can see, translation is located at 13-15. Now, if you use the transposed version of that translation matrix (x, y and z to the left in the bottom row), you must also transpose the index layout, making translation still located at index 13-15.

A matrix in OpenGL is a one sequence of 16 elements mapped in a cetrain way (for example, 13-15 for translation). How YOU translate this into a 2D layout is up to you.

Diapolo
11-21-2002, 12:32 PM
Thanks for your reply.

What still confuses me is the following.
Look at the Matrix layout, like you posted it. If you want to access the translation part via the array index you have to use 3, 7 and 11 as index for elements 13, 14 and 15.

So I think how I do it, it is more straight forward (I can use element - 1 as index), or did I overlook something here?

Diapolo

Bob
11-21-2002, 12:55 PM
Look at the Matrix layout, like you posted it. If you want to access the translation part via the array index you have to use 3, 7 and 11 as index for elements 13, 14 and 15.

Huh? You use index 12, 13 and 14 to access the translation part in my matrix. Subtract one from all numbers in my matrix and you have the offset in the array.

Diapolo
11-21-2002, 01:02 PM
OK, wait ... so the content of our matrices are identical (the indices too: element - 1) and _ONLY_ the 2D view of the matrix differs?

Thatīs what you said about 2D layout is up to me http://www.opengl.org/discussion_boards/ubb/wink.gif.

Oh damn, I feel so stupid now http://www.opengl.org/discussion_boards/ubb/biggrin.gif.

Diapolo

[This message has been edited by Diapolo (edited 11-21-2002).]

castano
11-21-2002, 03:04 PM
For more info about how OpenGL matrices work have a look at:
http://talika.eii.us.es/~titan/oglfaq/index.html#SUBJECT19

Marco
11-21-2002, 03:11 PM
You can find related information at http://research.microsoft.com/~hollasch/cgindex/math/matrix/column-vec.html


[This message has been edited by Marco (edited 11-21-2002).]

[This message has been edited by Marco (edited 11-21-2002).]