gluTessProperty - set a tessellation object property
void gluTessProperty( GLUtesselator* tess,
GLenum which,
GLdouble data )
- 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.
- data
- 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".
data may be set to one of GLU_TESS_WINDING_ODD,
GLU_TESS_WINDING_NONZERO, GLU_TESS_WINDING_POSITIVE, or
GLU_TESS_WINDING_NEGATIVE, or
GLU_TESS_WINDING_ABS_GEQ_TWO.
- To understand how the winding rule works, 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 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 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 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 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 initial tolerance is 0.
- 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.
gluGetTessProperty, gluNewTess