---
name: "gluPerspective"
section: "3x"
platform: "linux"
package: "xlibmesa-glu-dev"
version: "4.3.0.dfsg.1-14sarge7"
release: "Debian 3.1 (Sarge)"
platforms: ["linux"]
url: "https://new.carta.tech/gluPerspective"
---

# gluPerspective(3x)

set up a perspective projection matrix

## 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)**
