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/