NAME

gluLookAt - define a viewing transformation

C SPECIFICATION

void gglluuLLooookkAAtt( GLdouble _e_y_e_X,
                GLdouble _e_y_e_Y,
                GLdouble _e_y_e_Z,
                GLdouble _c_e_n_t_e_r_X,
                GLdouble _c_e_n_t_e_r_Y,
                GLdouble _c_e_n_t_e_r_Z,
                GLdouble _u_p_X,
                GLdouble _u_p_Y,
                GLdouble _u_p_Z )

delim $$

PARAMETERS

_e_y_e_X, _e_y_e_Y, _e_y_e_Z
Specifies the position of the eye point.
_c_e_n_t_e_r_X, _c_e_n_t_e_r_Y, _c_e_n_t_e_r_Z
Specifies the position of the reference point.
_u_p_X, _u_p_Y, _u_p_Z
Specifies the direction of the _u_p vector.

DESCRIPTION

gglluuLLooookkAAtt creates a viewing matrix derived from an eye point, a reference point indicating the center of the scene, and an _U_P vector.

The matrix maps the reference point to the negative _z axis and the eye point to the origin. When a typical projection matrix is used, the center of the scene therefore maps to the center of the viewport. Similarly, the direction described by the _U_P vector projected onto the viewing plane is mapped to the positive _y axis so that it points upward in the viewport. The _U_P vector must not be parallel to the line of sight from the eye point to the reference point.

Let

F ~=~ left ( down 20 { ~ matrix { ccol {"centerX" above "centerY" above "centerZ"} ccol { ~-~ above ~-~ above ~-~} ccol {"eyeX" above "eyeY" above "eyeZ"} } } ~~ right )



Let _U_P be the vector $("upX", "upY", "upZ")$.

Then normalize as follows: f ~=~ F over {|| F ||}

UP sup prime ~=~ UP over {|| UP ||}

Finally, let $s ~=~ f ~times~ UP sup prime$, and $u ~=~ s ~times~ f$.



M is then constructed as follows: M ~=~ left ( matrix { ccol { ~s[0] above ~u[0] above -f[0] above 0 } ccol { ~s[1] above ~u[1] above -f[1] above 0 } ccol { ~s[2] above ~u[2] above -f[2] above 0 } ccol { 0 above 0 above 0 above 1 } } ~~right )

and gglluuLLooookkAAtt is equivalent to glMultMatrixf(M); glTranslated (-eyex, -eyey, -eyez);

SEE ALSO

ggllFFrruussttuumm((33GG)), gglluuPPeerrssppeeccttiivvee((33GG))