


GLMAP2(3G)					       GLMAP2(3G)


NAME
       glMap2d, glMap2f - define a two-dimensional evaluator


C SPECIFICATION
       void glMap2d( GLenum target,
		     GLdouble u1,
		     GLdouble u2,
		     GLint ustride,
		     GLint uorder,
		     GLdouble v1,
		     GLdouble v2,
		     GLint vstride,
		     GLint vorder,
		     const GLdouble *points )
       void glMap2f( GLenum target,
		     GLfloat u1,
		     GLfloat u2,
		     GLint ustride,
		     GLint uorder,
		     GLfloat v1,
		     GLfloat v2,
		     GLint vstride,
		     GLint vorder,
		     const GLfloat *points )


PARAMETERS
       target	Specifies  the	kind of values that are generated
		by    the    evaluator.	    Symbolic	constants
		GL_MAP2_VERTEX_3,		GL_MAP2_VERTEX_4,
		GL_MAP2_INDEX,	GL_MAP2_COLOR_4,  GL_MAP2_NORMAL,
		GL_MAP2_TEXTURE_COORD_1, GL_MAP2_TEXTURE_COORD_2,
		GL_MAP2_TEXTURE_COORD_3,		      and
		GL_MAP2_TEXTURE_COORD_4 are accepted.

       u1, u2	Specify	 a  linear  mapping of u, as presented to
		glEvalCoord2, to u, one of the two variables that
		are  evaluated by the equations specified by this
		command. Initially, u1 is 0 and u2 is 1.

       ustride	Specifies the number of floats or doubles between
		the beginning of control point Rij and the begin
		ning of control point R(i+1)j, where i and j  are
		the  u and v control point indices, respectively.
		This allows control  points  to	 be  embedded  in
		arbitrary  data	 structures.  The only constraint
		is that the values for a particular control point
		must occupy contiguous memory locations. The ini
		tial value of ustride is 0.

       uorder	Specifies the  dimension  of  the  control  point
		array  in the u axis.  Must be positive. The ini
		tial value is 1.



								1





GLMAP2(3G)					       GLMAP2(3G)


       v1, v2	Specify a linear mapping of v,	as  presented  to
		glEvalCoord2, to v, one of the two variables that
		are evaluated by the equations specified by  this
		command. Initially, v1 is 0 and v2 is 1.

       vstride	Specifies the number of floats or doubles between
		the beginning of control point Rij and the begin
		ning  of control point Ri(j+1), where i and j are
		the u and v control point indices,  respectively.
		This  allows  control  points  to  be embedded in
		arbitrary data structures.  The	 only  constraint
		is that the values for a particular control point
		must occupy contiguous memory locations. The ini
		tial value of vstride is 0.

       vorder	Specifies  the	dimension  of  the  control point
		array in the v axis.  Must be positive. The  ini
		tial value is 1.

       points	Specifies  a  pointer  to  the	array  of control
		points.

DESCRIPTION
       Evaluators provide a way to  use	 polynomial  or	 rational
       polynomial  mapping  to produce vertices, normals, texture
       coordinates, and colors.	 The values produced by an evalu
       ator  are  sent on to further stages of GL processing just
       as if they had been presented  using  glVertex,	glNormal,
       glTexCoord,  and	 glColor commands, except that the gener
       ated values do not  update  the	current	 normal,  texture
       coordinates, or color.

       All  polynomial	or  rational  polynomial  splines  of any
       degree (up to the  maximum  degree  supported  by  the  GL
       implementation)	can be described using evaluators.  These
       include almost all surfaces  used  in  computer	graphics,
       including  B-spline  surfaces, NURBS surfaces, Bezier sur
       faces, and so on.

       Evaluators define surfaces based	 on  bivariate	Bernstein
       polynomials.  Define p(u,v) as

		       p(u,v)=>0>0Bi(u)Bj(v)Rij


       where  Rij  is a control point, Bi(u) is the ith Bernstein
       polynomial of degree
       n (uorder = n+1)









								2





GLMAP2(3G)					       GLMAP2(3G)

				 n









			  Bi(u)=( )ui(1-u)n-i









				 i

       and Bj(v) is the jth  Bernstein	polynomial  of	degree	m
       (vorder = m+1)
				 m









			  Bj(v)=( )vj(1-v)m-j









				 j

       Recall that		       n









			    00==1 and ( )==1









				       0



GLMAP2(3G)					       GLMAP2(3G)


       glMap2  is  used	 to  define the basis and to specify what
       kind of values are produced.  Once defined, a map  can  be
       enabled	and  disabled  by  calling glEnable and glDisable
       with the map name, one of the nine predefined  values  for
       target,	described below.  When glEvalCoord2 presents val
       ues u and v, the bivariate Bernstein polynomials are eval
       uated using u and v, where

				u=u2-u1

				v=v2-v1

       target  is a symbolic constant that indicates what kind of
       control points are provided in points, and what output  is
       generated when the map is evaluated.  It can assume one of
       nine predefined values:

       GL_MAP2_VERTEX_3		Each  control  point   is   three
				floating-point	values represent
				ing  x,	 y,  and   z.	 Internal
				glVertex3  commands are generated
				when the map is evaluated.

       GL_MAP2_VERTEX_4		Each control point is four float
				ing-point  values representing x,
				y, z, and w.  Internal	glVertex4
				commands  are  generated when the
				map is evaluated.

       GL_MAP2_INDEX		Each control point  is	a  single
				floating-point value representing
				a color index.	Internal  glIndex
				commands  are  generated when the
				map is evaluated but the  current
				index  is  not	updated	 with the
				value of these glIndex	commands.

       GL_MAP2_COLOR_4		Each control point is four float
				ing-point   values   representing
				red,   green,  blue,  and  alpha.
				Internal  glColor4  commands  are
				generated  when the map is evalu
				ated but the current color is not
				updated	 with  the value of these
				glColor4 commands.

       GL_MAP2_NORMAL		Each  control  point   is   three
				floating-point	values represent
				ing the x, y, and z components of
				a    normal   vector.	 Internal
				glNormal commands  are	generated
				when the map is evaluated but the
				current	 normal	 is  not  updated
				with  the value of these glNormal



								4





GLMAP2(3G)					       GLMAP2(3G)


				commands.

       GL_MAP2_TEXTURE_COORD_1	Each control point  is	a  single
				floating-point value representing
				the s texture coordinate.  Inter
				nal
				glTexCoord1  commands  are gener
				ated when the  map  is	evaluated
				but  the  current texture coordi
				nates are not  updated	with  the
				value  of  these  glTexCoord com
				mands.

       GL_MAP2_TEXTURE_COORD_2	Each control point is two  float
				ing-point values representing the
				s  and	t  texture   coordinates.
				Internal
				glTexCoord2  commands  are gener
				ated when the  map  is	evaluated
				but  the  current texture coordi
				nates are not  updated	with  the
				value  of  these  glTexCoord com
				mands.

       GL_MAP2_TEXTURE_COORD_3	Each  control  point   is   three
				floating-point	values represent
				ing the s, t, and r texture coor
				dinates.    Internal  glTexCoord3
				commands are generated	when  the
				map  is evaluated but the current
				texture	  coordinates	are   not
				updated	 with  the value of these
				glTexCoord commands.

       GL_MAP2_TEXTURE_COORD_4	Each control point is four float
				ing-point values representing the
				s, t, r, and  q	 texture  coordi
				nates.	Internal
				glTexCoord4  commands  are gener
				ated when the  map  is	evaluated
				but  the  current texture coordi
				nates are not  updated	with  the
				value  of  these  glTexCoord com
				mands.

       ustride, uorder, vstride, vorder, and  points  define  the
       array addressing for accessing the control points.  points
       is the location of the first control point, which occupies
       one,  two,  three,  or  four  contiguous memory locations,
       depending on  which  map	 is  being  defined.   There  are
       uordervorder control points in the array.  ustride speci
       fies how many float or double  locations	 are  skipped  to
       advance the internal memory pointer from control point Rij
       to control point	 R(i+1)j.   vstride  specifies	how  many



								5





GLMAP2(3G)					       GLMAP2(3G)


       float  or  double  locations  are  skipped  to advance the
       internal memory pointer from control point Rij to  control
       point Ri(j+1).

NOTES
       As  is  the case with all GL commands that accept pointers
       to data, it is as if the contents of points were copied by
       glMap2  before glMap2 returns.  Changes to the contents of
       points have no effect after glMap2 is called.

       Initially, GL_AUTO_NORMAL is enabled. If GL_AUTO_NORMAL is
       enabled,	  normal   vectors   are  generated  when  either
       GL_MAP2_VERTEX_3 or GL_MAP2_VERTEX_4 is used  to	 generate
       vertices.

ERRORS
       GL_INVALID_ENUM	is generated if target is not an accepted
       value.

       GL_INVALID_VALUE is generated if u1 is equal to u2, or  if
       v1 is equal to v2.

       GL_INVALID_VALUE is generated if either ustride or vstride
       is less than the number of values in a control point.

       GL_INVALID_VALUE is generated if either uorder  or  vorder
       is  less	 than  1  or  greater  than  the  return value of
       GL_MAX_EVAL_ORDER.

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

       When  the  GL_ARB_multitexture  extension  is   supported,
       GL_INVALID_OPERATION  is generated if glMap2 is called and
       the value of GL_ACTIVE_TEXTURE_ARB is not GL_TEXTURE0_ARB.

ASSOCIATED GETS
       glGetMap
       glGet with argument GL_MAX_EVAL_ORDER
       glIsEnabled with argument GL_MAP2_VERTEX_3
       glIsEnabled with argument GL_MAP2_VERTEX_4
       glIsEnabled with argument GL_MAP2_INDEX
       glIsEnabled with argument GL_MAP2_COLOR_4
       glIsEnabled with argument GL_MAP2_NORMAL
       glIsEnabled with argument GL_MAP2_TEXTURE_COORD_1
       glIsEnabled with argument GL_MAP2_TEXTURE_COORD_2
       glIsEnabled with argument GL_MAP2_TEXTURE_COORD_3
       glIsEnabled with argument GL_MAP2_TEXTURE_COORD_4

SEE ALSO
       glBegin(3G),  glColor(3G),  glEnable(3G), glEvalCoord(3G),
       glEvalMesh(3G),	      glEvalPoint(3G),	      glMap1(3G),
       glMapGrid(3G), glNormal(3G), glTexCoord(3G), glVertex(3G)



								6


