gluTessProperty
[New
- Windows 95, OEM Service Release 2]
The gluTessProperty function sets the property
of a tessellation object.
void gluTessProperty(
GLUtesselator * tess, |
|
GLenum which, |
|
GLdouble value |
|
); |
|
Parameters
tess
The
tessellation object (created with gluNewTessCIEF84).
which
The property
value to set. The following values are valid: GLU_TESS_WINDING_RULE,
GLU_TESS_BOUNDARY_ONLY, and GLU_TESS_TOLERANCE.
For more
information about these values, see the following Remarks section.
value
The value of
the indicated property.
Remarks
The gluTessProperty
function controls properties stored in a tessellation object. These properties
affect the way the polygons are interpreted and rendered. The following values
are valid:
GLU_TESS_WINDING_RULE
Determines
which parts of the polygon are on the interior. The value parameter may
be set to one of the following: GLU_TESS_WINDING_ODD, GLU_TESS_WINDING_NONZERO,
GLU_TESS_WINDING_POSITIVE, GLU_TESS_WINDING_NEGATIVE, or
GLU_TESS_WINDING_ABS_GEQ_TWO.
To understand
how the winding rule works, first consider that the input contours partition
the plane into regions. The winding rule determines which of these regions are
inside the polygon.
For a
single-contour C, the winding number of a point x is simply the signed
number of revolutions we make around x as we travel once around C (where
counterclockwise is positive). When there are several contours, the individual
winding numbers are summed. This procedure associates a signed integer value
with each point x in the plane. Note that the winding number is the same
for all points in a single region.
The winding
rule classifies a region as inside if its winding number belongs to the chosen
category (odd, nonzero, positive, negative, or absolute value of at least two).
The previous GLU tessellator (prior to GLU 1.2) used the odd rule. The
nonzero rule (GLU_TESS_WINDING_NONZERO) is another common way to define the
interior. The other three rules (GLU_TESS_WINDING_POSITIVE,
GLU_TESS_WINDING_NEGATIVE, GLU_TESS_WINDING_ABS_GEQ_TWO) are useful for polygon
CSG operations.
GLU_TESS_BOUNDARY_ONLY
Specifies a
Boolean value (set value to GL_TRUE or GL_FALSE). When you set value to
GL_TRUE, a set of closed contours separating the polygon interior and exterior
is returned instead of a tessellation. Exterior contours are oriented
counterclockwise with respect to the normal; interior contours are oriented
clockwise. The GLU_TESS_BEGIN and GLU_TESS_BEGIN_DATA callbacks use the type GL_LINE_LOOP
for each contour.
GLU_TESS_TOLERANCE
Specifies a
tolerance for merging features to reduce the size of the output. For example,
two vertices that are very close to each other might be replaced by a single
vertex. The tolerance is multiplied by the largest coordinate magnitude of any
input vertex; this specifies the maximum distance that any feature can move as
the result of a single merge operation. If a single feature takes part in
several merge operations, the total distance moved can be larger.
Feature
merging is completely optional; the tolerance is only a hint. The
implementation is free to merge in some cases and not in others, or to never
merge features at all. The default tolerance is zero.
The current
implementation merges vertices only if they are exactly coincident, regardless
of the current tolerance. A vertex is spliced into an edge only if the
implementation is unable to distinguish which side of the edge the vertex lies
on. Two edges are merged only when both endpoints are identical.
See Also