glFrustum.3gl




Name

  glFrustum - multiply the current matrix by a perspective matrix


C Specification

  void glFrustum( GLdouble left,
		  GLdouble right,
		  GLdouble bottom,
		  GLdouble top,
		  GLdouble near,
		  GLdouble far )


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.

  near,	far   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.  (left, bottom, -near) and (right, top,  -near) specify the
  points on the	near clipping plane that are mapped to the lower left and
  upper	right corners of the window, respectively, assuming that the eye is
  located at (0, 0, 0).	 -far specifies	the location of	the far	clipping
  plane.  Both near and	far must be positive.  The corresponding matrix	is

		   |					   |
		   |    2·near  			   |
                   |  ----------                           |
		   |  right-left       0       A       0   |
		   |					   |
		   |	  0	    2·near     B       0   |
		   |              ----------               |
		   |		  top-bottom		   |
		   |	  0	       0       C       D   |
		   |					   |
		   |	  0	       0       -1      0   |

				    right+left
				A = ----------
				    right-left

				    top+bottom
				B = ----------
				    top-bottom

				      far+near
				C = - --------
				      far-near

				      2·far·near
				D = - ----------
				       far-near


  The current matrix is	multiplied by this matrix with the result replacing
  the current matrix.  That is,	if M is	the current matrix and F is the
  frustum perspective matrix, then M is	replaced with M·F.

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

Notes

  Depth	buffer precision is affected by	the values specified for near and
  far.	The greater the	ratio of far to	near is, the less effective the	depth
  buffer will be at distinguishing between surfaces that are near each other.
  If

				       far
				   r = ----
				       near

  roughly log  r bits of depth buffer precision are lost.  Because r
             2
  approaches infinity as near approaches zero, near must never be set to
  zero.

Errors

  GL_INVALID_VALUE is generated	if near	or far 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

See Also

  glOrtho, glMatrixMode, glMultMatrix, glPushMatrix, glViewport




Introduction | Alphabetic | Specification

Last Edited: Mon, May 22, 1995

AFV