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