From "Matrix_implementation.cpp" (slightly edited)

mat = [ r00 r01 r02 a
       r10 r11 r12 b
       r20 r21 r22 c
       tx  ty  tz  d ]
We note that this matrix can be split into three matrices.
mat = rot * trans * corr, where rot is rotation part, trans is translation
part, and corr is the correction due to perspective (if any).
rot = [ r00 r01 r02 0
       r10 r11 r12 0
       r20 r21 r22 0
       0   0   0   1 ]
trans = [ 1  0  0  0
         0  1  0  0
         0  0  1  0
         tx ty tz 1 ]
corr = [ 1 0 0 px
        0 1 0 py
        0 0 1 pz
        0 0 0 s ]
where the elements of corr are obtained from linear combinations of the
elements of rot, trans, and mat.
[px py pz s] will be [0 0 0 1] if mat was composed only of rotations,
scales, and translations (which is common).

Internally, matrix is a float (or double ) [4][4], i.e. [ROW][COL]. If you
set a Matrix via a pointer to 16 floats, then the row/col order will look
like this:

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

Does that help?

David
_______________________________________________
osg-users mailing list
[email protected]
http://openscenegraph.net/mailman/listinfo/osg-users
http://www.openscenegraph.org/

Reply via email to