glEvalMesh
GLEVALMESH(3G) GLEVALMESH(3G)
NAME
glEvalMesh1, glEvalMesh2 - compute a one- or two-dimensional grid of
points or lines
C SPECIFICATION
void glEvalMesh1( GLenum mode,
GLint i1,
GLint i2 )
PARAMETERS
mode In glEvalMesh1, specifies whether to compute a one-dimensional
mesh of points or lines. Symbolic constants GL_POINT and
GL_LINE are accepted.
i1, i2
Specify the first and last integer values for grid domain vari-
able i.
C SPECIFICATION
void glEvalMesh2( GLenum mode,
GLint i1,
GLint i2,
GLint j1,
GLint j2 )
PARAMETERS
mode In glEvalMesh2, specifies whether to compute a two-dimensional
mesh of points, lines, or polygons. Symbolic constants
GL_POINT, GL_LINE, and GL_FILL are accepted.
i1, i2 Specify the first and last integer values for grid domain vari-
able i.
j1, j2 Specify the first and last integer values for grid domain vari-
able j.
DESCRIPTION
glMapGrid and glEvalMesh are used in tandem to efficiently generate
and evaluate a series of evenly-spaced map domain values. glEvalMesh
steps through the integer domain of a one- or two-dimensional grid,
whose range is the domain of the evaluation maps specified by glMap1
and glMap2. mode determines whether the resulting vertices are con-
nected as points, lines, or filled polygons.
In the one-dimensional case, glEvalMesh1, the mesh is generated as if
the following code fragment were executed:
glBegin( type );
for ( i = i1; i <= i2; i += 1 )
glEvalCoord1( i⋅Δu+u1 );
glEnd();
where
Δu=(u2−u1)/n
and n, u1, and u2 are the arguments to the most recent glMapGrid1 command.
type is GL_POINTS if mode is GL_POINT, or GL_LINES if mode is GL_LINE.
The one absolute numeric requirement is that if i=n, then the value computed
from i⋅Δu+u1 is exactly u2.
In the two-dimensional case, glEvalMesh2, let
Δu=(u2−u1)/n
Δv=(v2−v1)/m,
where n, u1, u2, m, v1, and v2 are the arguments to the most recent
glMapGrid2 command. Then, if mode is GL_FILL, the glEvalMesh2 command is
equivalent to:
for ( j = j1; j < j2; j += 1 ) {
glBegin( GL_QUAD_STRIP );
for ( i = i1; i <= i2; i += 1 ) {
glEvalCoord2( i⋅Δu+u1, j⋅Δv+v1 );
glEvalCoord2( i⋅Δu+u1, (j+1)⋅Δv+v1 );
}
glEnd();
}
If mode is GL_LINE, then a call to glEvalMesh2 is equivalent to:
for ( j = j1; j <= j2; j += 1 ) {
glBegin( GL_LINE_STRIP );
for ( i = i1; i <= i2; i += 1 )
glEvalCoord2( i⋅Δu+u1, j⋅Δv+v1 );
glEnd();
}
for ( i = i1; i <= i2; i += 1 ) {
glBegin( GL_LINE_STRIP );
for ( j = j1; j <= j1; j += 1 )
glEvalCoord2( i⋅Δu+u1, j⋅Δv+v1 );
glEnd();
}
And finally, if mode is GL_POINT, then a call to glEvalMesh2 is equivalent
to:
glBegin( GL_POINTS );
for ( j = j1; j <= j2; j += 1 )
for ( i = i1; i <= i2; i += 1 )
glEvalCoord2( i⋅Δu+u1, j⋅Δv+v1 );
glEnd();
In all three cases, the only absolute numeric requirements are that if i=n,
then the value computed from i⋅Δu+u1 is exactly u2, and if j=m, then the
value computed from j⋅Δv+v1 is exactly v2.
ERRORS
GL_INVALID_ENUM is generated if mode is not an accepted value.
GL_INVALID_OPERATION is generated if glEvalMesh is executed between
the execution of glBegin and the corresponding execution of glEnd.
ASSOCIATED GETS
glGet with argument GL_MAP1_GRID_DOMAIN
glGet with argument GL_MAP2_GRID_DOMAIN
glGet with argument GL_MAP1_GRID_SEGMENTS
glGet with argument GL_MAP2_GRID_SEGMENTS
SEE ALSO
glBegin(3G), glEvalCoord(3G), glEvalPoint(3G), glMap1(3G), glMap2(3G),
glMapGrid(3G)
GLEVALMESH(3G)