Hi,
in the example for gluLookAt it has
gluLookAt( 4.0,2.0, 1.0, 2.0, 4.0, -3.0, 2.0, 2.0, -1.0)
The Up vector 2.0, 2.0, -1.0 is the cross product of 4.0,2.0, 1.0, and 2.0, 4.0, -3.0
I get the cross product to be 10, 14, 12
help!
MacSam
Hi,
in the example for gluLookAt it has
gluLookAt( 4.0,2.0, 1.0, 2.0, 4.0, -3.0, 2.0, 2.0, -1.0)
The Up vector 2.0, 2.0, -1.0 is the cross product of 4.0,2.0, 1.0, and 2.0, 4.0, -3.0
I get the cross product to be 10, 14, 12
help!
MacSam
What are you trying to accomplish? What you’re doing doesn’t make sense.
Check out the man page: gluLookAt
void gluLookAt( GLdouble eyeX,
GLdouble eyeY,
GLdouble eyeZ,
GLdouble centerX,
GLdouble centerY,
GLdouble centerZ,
GLdouble upX,
GLdouble upY,
GLdouble upZ );
The first 3 parameters define a position (in WORLD space).
The 2nd 3 parameters define a position (in WORLD space).
The 3rd 3 parameters define a vector (in WORLD space).
Take (center - eye), normalize it, and you’ve defined a unit vector pointing “forward” in EYE-SPACE (i.e. the direction your camera is looking). However, to define a coordinate space transform, this is unconstrained. You need to know what direction is “up” and what is “right”. The “up” parameters give you the former, and the right-hand rule (the cross product you mention) implicitly gives you the latter.
If you’re determined to apply the cross product here, try:
forward_vec = normalize( center - eye ); // This is the eye-space -Z axis (in WORLD space)
up_vec = normalize( up ); // This is the eye-space +Y axis (in WORLD space)
right_vec = cross( forward_vec, up_vec ); // This is the eye-space +X axis (in WORLD space)