# FreeBSD Manual Pages

```GLFRUSTUM()							   GLFRUSTUM()

NAME
glFrustum - multiply the	current	matrix by a perspective	matrix

C SPECIFICATION
void glFrustum( GLdouble	left,
GLdouble	right,
GLdouble	bottom,
GLdouble	top,
GLdouble	zNear,
GLdouble	zFar )

delim \$\$

PARAMETERS
left, right Specify  the	 coordinates  for  the left and	right vertical
clipping planes.

bottom, top Specify the coordinates for the bottom and  top  horizontal
clipping planes.

zNear, zFar Specify  the	 distances  to the near	and far	depth clipping
planes.  Both distances must	be positive.

DESCRIPTION
glFrustum describes a perspective matrix	that  produces	a  perspective
projection.   The  current  matrix  (see	glMatrixMode) is multiplied by
this matrix and the result replaces the current matrix, as if glMultMa-
trix were called	with the following matrix as its argument:

down 130 {left ( ~~	matrix {
ccol { {{2 ~ "zNear"}	over {"right" -	"left"}} above 0 above 0 above
0 }
ccol { 0 above {{2 ~ "zNear"}	over {"top" -  "bottom"}}  ~  above  0
above 0 }
ccol { A ~~~~	above B	~~~~ above C ~~~~ above	-1 ~~~~}
ccol { 0 above 0 above D above 0} }  ~~~ right )}

down 130
{A ~=~ {"right" + "left"} over {"right" - "left"}}

down 130
{B ~=~ {"top" + "bottom"} over {"top" - "bottom"}}

down 130
{C ~=~ -{{"zFar"	+ "zNear"} over	{"zFar"	- "zNear"}}}

down 130
{D ~=~ -{{2 ~ "zFar" ~ "zNear"} over {"zFar" - "zNear"}}}

Typically, the matrix mode is GL_PROJECTION, and	(left, bottom, -zNear)
and (right, top,	 -zNear) specify the points on the near	clipping plane
that  are  mapped to the	lower left and upper right corners of the win-
dow, assuming that the eye is located at	(0, 0,	0).   -zFar  specifies
the  location  of  the far clipping plane.  Both	zNear and zFar must be
positive.

Use glPushMatrix	and glPopMatrix	to save	and restore the	current	matrix
stack.

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	effec-
tive  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.   Be-
cause  \$r\$  approaches infinity as zNear	approaches 0, zNear must never
be set to 0.

ERRORS
GL_INVALID_VALUE	is generated if	zNear or zFar is not positive.

GL_INVALID_OPERATION is generated if glFrustum is executed between  the
execution of glBegin and	the corresponding execution of glEnd.

ASSOCIATED GETS
glGet with argument GL_MATRIX_MODE
glGet with argument GL_MODELVIEW_MATRIX
glGet with argument GL_PROJECTION_MATRIX
glGet with argument GL_TEXTURE_MATRIX