-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Paul Martz wrote:
> I agree with your post, and I think the "apparent" difference between your
> comments and mine (even though both are right) is explained by how the
> matrices are laid out in memory.
>
> My statement was intended to declare that both OpenGL and OSG matrices are
> laid out the same in memory. The "10" in your translation matrix, below, is
> the 13th floating point value in memory, and that's true for both OpenGL and
> OSG.
>    -Paul
>
>
This is absolutely true. In other words, you can pass an OSG matrix to
glLoadMatrix unchanged and it will do the right thing. Or, said in still
another way, pre-multiplication of a column vector by a matrix is
equivalent to post-multiplicatoin of a row vector by the transpose of
the matrix.

Some of the confusion comes from the "row-major" storage order of C; C
programmers are used to thinking of the first subscript as accessing the
row; others think of it as addressing the column.

IIRC Iris GL described its transforms as post-multiplication of row
vectors; again, even though OpenGL specifies pre-multiplication of
column vectors, the matrices themselves are absolutely compatible
between the two systems.

Tim

>> -----Original Message-----
>> From: [EMAIL PROTECTED]
>> [mailto:[EMAIL PROTECTED] On Behalf Of Jan Ciger
>> Sent: Friday, February 23, 2007 4:29 PM
>> To: osg users
>> Subject: Re: [osg-users] matrix multiplications and transforms
>>
>> On Saturday 24 February 2007, Paul Martz wrote:
>>> Thanks, I will take care as I document this. I think I
>> understand the
>>> difference, but Jan and Robert please read what I have below and
>>> verify I've got things correct.
>>>
>>> Though OpenGL uses column-major notation, an orthonormal
>> basis stored
>>> in that matrix has axis and origin elements stored
>> consecutively. That
>>> is, the new X-axis is in elements [ 0 1 2 ], the new Y axis in
>>> elements [ 4 5 6 ], etc.
>>>
>>> The situation is the same in OSG: OSG does not have to
>> transpose its
>>> matrix before calling glLoadMatrix[fd]().
>> Hmm, I am not sure whether I am completely following (I
>> didn't program raw OpenGL in a while), however the typical
>> case where things fail is this:
>>
>> I want to translate a point [x,y,z] by 10 units in the 'x'
>> direction (i.e. to the right). In OSG, the matrix and
>> multiplication look like:
>>
>> [x,y,z,1] * | 1 0 0 0 |
>>             | 0 1 0 0 |
>>             | 0 0 1 0 |
>>             | 10 0 0 1 |
>>
>> When dealing with OpenGL, the matrix looks like:
>>
>> | 1 0 0 10 |    |x|
>> | 0 1 0  0 |  * |y|
>> | 0 0 1  0 |    |z|
>> | 1 0 0  1 |    |1|
>>
>> The glLoadMatrix is documented here (including the diagram):
>> http://www.opengl.org/documentation/specs/man_pages/hardcopy/G
>> L/html/gl/loadmatrix.html
>>
>> And the OSG implementation is clear from the file
>> src/osg/Matrix_implementation.cpp in the OSG source.
>>
>> To me it seems that you need to transpose, unless I am
>> missing something really obvious. The trick could be in the
>> way the matrices *in memory* are stored and interpreted, but
>> I am too fried now to think clearly about this.
>>
>>> (I hope this hasn't added to the confusion? Seriously, I
>> was trying to
>>> clarify things with this post... :-)
>>>    -Paul
>> :)
>>
>> Jan
>>
>>
>> --
>>
>> Jan Ciger
>> GPG public key: http://www.keyserver.net/
>>
>>
>
> _______________________________________________
> osg-users mailing list
> [email protected]
> http://openscenegraph.net/mailman/listinfo/osg-users
> http://www.openscenegraph.org/
>

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.6 (GNU/Linux)
Comment: Using GnuPG with Fedora - http://enigmail.mozdev.org

iD8DBQFF38VIeDhWHdXrDRURAttqAJ9U2k6LIFlKetSAVILFth/aMwypigCeP2gP
7KOzIGl4aF+3B7DTW5MK0xg=
=stGO
-----END PGP SIGNATURE-----
_______________________________________________
osg-users mailing list
[email protected]
http://openscenegraph.net/mailman/listinfo/osg-users
http://www.openscenegraph.org/

Reply via email to