void **gluLookAt**(
GLdouble *eyeX*,
GLdouble *eyeY*,
GLdouble *eyeZ*,
GLdouble *centerX*,
GLdouble *centerY*,
GLdouble *centerZ*,
GLdouble *upX*,
GLdouble *upY*,
GLdouble *upZ* )

**gluLookAt** creates a viewing matrix derived from an eye point, a reference
point indicating the center of the scene, and an *UP* 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 *UP*
vector projected onto the viewing plane is mapped to the positive *y*
axis so that it points upward in the viewport.
The *UP* vector must not be parallel to the line of sight from the
eye point to the reference point.

Let

*F* = (*down*20 matrix ( centerX centerY centerZ - - - eyeX eyeY eyeZ ) )

Let *UP* be the vector (upX,upY,upZ).

Then normalize as follows:
*f* = *F* / ||*F*||

*UP*^{' } = *UP* / ||*UP*||

Finally, let *s* = *f* *times* *UP*^{' }, and *u* = *s* *times* *f*.

M is then constructed as follows:
*M* = (matrix ( *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 ) )

and **gluLookAt** is equivalent to

.Ex
glMultMatrixf(M);
glTranslated (-eyex, -eyey, -eyez);

.Ee