OpenGL man pages
gluTessProperty.3gl (GLU version 1.2 and later)
gluTessProperty - set a tessellation object property
void gluTessProperty( GLUtesselator *tess,
GLdouble value )
tess Specifies the tessellation object (created with gluNewTess).
which Specifies the property to be set. Valid values are
GLU_TESS_WINDING_RULE, GLU_TESS_BOUNDARY_ONLY, GLU_TESS_TOLERANCE.
value Specifies the value of the indicated property.
gluTessProperty is used to control properties stored in a tessellation
object. These properties affect the way that the polygons are interpreted
and rendered. The legal values for which are as follows:
GLU_TESS_WINDING_RULE determines which parts of the polygon are on the
"interior". value may be set to one of
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
CCW 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
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 is another common way to
define the interior. The other three rules are
useful for polygon CSG operations.
GLU_TESS_BOUNDARY_ONLY is a boolean value ("value" should be set to
GL_TRUE or GL_FALSE). When set to GL_TRUE, a set
of closed contours separating the polygon interior
and exterior are returned instead of a
tessellation. Exterior contours are oriented CCW
with respect to the normal, interior contours are
oriented CW. 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 which 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 could 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
Fri Dec 6 11:18:03 EST 1996
Look here for legal stuff: Legal