Hi, Robert,

    I'm doing some object rotation and translation stuff on my own so I 
looked at the OSG math code for inspiration. From what I read before 
OSG uses post multiplication, meaning if I want to transform a vector I 
need to do a V * M or, in OSG functions, M.preMult(V), where V is the 
vector and M is the transformation matrix. This multiplication order seems 
to be supported by how a translation matrix is created, by assigning the 
translation values to the bottom row of the matrix. But, I got confused 
when examining the method of setting the matrix by look at values. In 
Matrix_implementation::makeLookAt(eye, center, up), it calculates the 
forward, up and side vectors f, u, and s. I assume it used the OpenGL 
convention of -z as the default forward direction and +y the default up 
direction. Then, it sets the rotation matrix R as: 

s[0] u[0] -f[0]   0
s[1] u[1] -f[1]   0
s[2] u[2] -f[2]   0
   0    0     0   1

But, with this matrix, if I apply it to the default forward vector F0 of 
(0, 0, -1, 1) via post multiplication, i.e. doing an F0 * R, I get (s[0], 
u[0], f[0], 1), instead of the correct value of the current forward vector 
(f[0], f[1], f[2], 1). I need to do a pre multiplication or R * F0 to get 
the correct value. 

    Is my understanding of makeLookAt() wrong? Does the matrix generated 
by makeLookAt() mean something else? Or, does OSG use a clever way of 
setting translation in the post mult convention by rotation in the pre 
mult convention, and always separating them out when applying the 
transformation? Can some OSGers help me clear my head on this? Thanks! 

    Best Regards,

    Yefei





_______________________________________________
osg-users mailing list
[email protected]
http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

Reply via email to