# GLUPERSPECTIVE

Section: Misc. Reference Manual Pages (3G)

Page Index

## NAME

**gluPerspective**
- set up a perspective projection matrix

## C SPECIFICATION

void

**gluPerspective**(
GLdouble

*fovy*,

GLdouble *aspect*,
GLdouble *zNear*,
GLdouble *zFar* )

delim $$

## PARAMETERS

*fovy*-
Specifies the field of view angle, in degrees, in the
*y* direction.
*aspect*-
Specifies the aspect ratio that determines
the field of view in the
*x* direction.
The aspect ratio is the ratio of *x* (width) to *y* (height).
*zNear*-
Specifies the distance from the viewer to the near clipping plane
(always positive).
*zFar*-
Specifies the distance from the viewer to the far clipping plane
(always positive).

## DESCRIPTION

**gluPerspective** specifies a viewing frustum into the world coordinate system.
In general, the aspect ratio in

**gluPerspective** should match the aspect ratio
of the associated viewport. For example, $ "aspect" ~=~ 2.0 $ means
the viewer's
angle of view is twice as wide in

*x* as it is in

*y*.
If the viewport is
twice as wide as it is tall, it displays the image without distortion.

The matrix generated by **gluPerspective** is multiplied by the current matrix,
just as if **glMultMatrix** were called with the generated matrix.
To load the perspective matrix onto the current matrix stack instead,
precede the call to **gluPerspective** with a call to **glLoadIdentity**.

Given *f* defined as follows:

f ~=~ cotangent"("{"fovy" over 2}")"
The generated matrix is

left ( ~~ down 130 { matrix {

ccol { {f over "aspect"} above 0 above 0 above 0 }

ccol { 0 above f above 0 above 0 }

ccol { 0 above 0 above {{"zFar" + "zNear"} over {"zNear" - "zFar"}} above -1 }

ccol { 0 above 0 above {{2 * "zFar" * "zNear"} over {"zNear" - "zFar"}} above 0}
}} ~~~ right )

## NOTES

Depth buffer precision is affected by the values specified for

*zNear* and

*zFar*.
The greater the ratio of

*zFar* to

*zNear* is,
the less effective the depth buffer will be at distinguishing between
surfaces that are near each other.
If

$r ~=~ "zFar" over "zNear"$

roughly $log sub 2 r$ bits of depth buffer precision are lost.
Because $r$ approaches infinity as *zNear* approaches 0,
*zNear* must never be set to 0.

## SEE ALSO

**glFrustum(3G)**,

**glLoadIdentity(3G)**,

**glMultMatrix(3G)**,

**gluOrtho2D(3G)**