Re: hpr or phr??

"Philippe C.D. Robert" <[email protected]> Fri, 12 Jul 2002 08:58:03 +0200
Newsgroups gmane.comp.gnu.3dkit.general
Message-ID <[email protected]>
Hi,

On Friday, July 12, 2002, at 12:08 AM, Brent Gulanowski wrote:
> Hi Phillipe,
>
> I'm having a dog of a time getting my rotations to make sense. As far 
> as I can discern, G3DTransform applies itself to the MODELVIEW matrix 
> directly,
>  and then its up to opengl to discern the rotations. I'm a novice here 
> of course, but it seems that the rotations get put into place along the 
> global X, Y and Z axes in that order (based on my tests). Are not the 
> hpr (heading pitch roll) usually associated with the *local* Y, X and Z 
> axes in that order?

The transformation *matrix* is applied to the modelview matrix, not the 
G3DTransform! Using a scene graph implies that these matrices get 
pushed/popped if needed, they are applied by the node who 'owns' them, 
so if you only have a transformation on a shape, it is applied to its 
local system, if you add one to the parent group node, the 
transformation is multiplied to the existing modelview matrix (BTW every 
graph node has a transformation matrix, normally it is the identity, 
though). Well, at least this is how you can imagine it, in fact this 
happens the other way around when traversing, so obviously you (the 
3DKit) have to take care from which side you multiply the matrices, and 
whether you use the transposed matrix or not...:-)

If this is not the case then I somehow somewhen introduced a sever bug!

> The problem is that in my editor, the user will have a base rotation 
> for their point of view (say, from the left or looking to the right) 
> and then they are applying a local-z or roll rotation to an object in 
> those terms, so I have to apply them correctly. Because it seems that 
> opengl applies them in a different order, I'm trying to figure out how 
> to use different combinations depending on both the user's location and 
> the relative rotation. Working in global coordinates is giving me a 
> headache.

The problem here is that GL uses a modeview matrix whereas the model and 
the view is not really the same thing. Have a look at the G3DCamera 
class to see how this works.

-Phil
--
Philippe C.D. Robert
http://www.nice.ch/~phip