NAME
gluTessVertex
- specify a vertex on a polygon
C SPECIFICATION
void gglluuTTeessssVVeerrtteexx(
GLUtesselator* _t_e_s_s,
GLdouble _*_l_o_c_a_t_i_o_n,
GLvoid* _d_a_t_a )
delim $$
PARAMETERS
-
_t_e_s_s
-
Specifies the tessellation object (created with gglluuNNeewwTTeessss).
-
_l_o_c_a_t_i_o_n
-
Specifies the location of the vertex.
-
_d_a_t_a
-
Specifies an opaque pointer passed back to the program with the vertex callback
(as specified by gglluuTTeessssCCaallllbbaacckk).
DESCRIPTION
gglluuTTeessssVVeerrtteexx describes a vertex on a polygon that the program defines. Successive
gglluuTTeessssVVeerrtteexx calls describe a closed contour. For example,
to describe a quadrilateral gglluuTTeessssVVeerrtteexx should be called four times.
gglluuTTeessssVVeerrtteexx can only be called between gglluuTTeessssBBeeggiinnCCoonnttoouurr and
gglluuTTeessssEEnnddCCoonnttoouurr.
_d_a_t_a normally points to a structure containing the vertex
location, as well as other per-vertex attributes such as color and normal.
This pointer is passed back to the user through the GGLLUU__TTEESSSS__VVEERRTTEEXX
or GGLLUU__TTEESSSS__VVEERRTTEEXX__DDAATTAA callback after tessellation
(see the gglluuTTeessssCCaallllbbaacckk reference page).
EXAMPLE
A quadrilateral with a triangular hole in it can be described as follows:
gluTessBeginPolygon(tobj, NULL);
gluTessBeginContour(tobj);
gluTessVertex(tobj, v1, v1);
gluTessVertex(tobj, v2, v2);
gluTessVertex(tobj, v3, v3);
gluTessVertex(tobj, v4, v4);
gluTessEndContour(tobj);
gluTessBeginContour(tobj);
gluTessVertex(tobj, v5, v5);
gluTessVertex(tobj, v6, v6);
gluTessVertex(tobj, v7, v7);
gluTessEndContour(tobj);
gluTessEndPolygon(tobj);
NOTES
It is a common error to use a local variable for _l_o_c_a_t_i_o_n or _d_a_t_a and store
values into it as part of a loop.
For example:
for (i = 0; i < NVERTICES; ++i) {
GLdouble data[3];
data[0] = vertex[i][0];
data[1] = vertex[i][1];
data[2] = vertex[i][2];
gluTessVertex(tobj, data, data);
}
This doesn't work.
Because the pointers specified by _l_o_c_a_t_i_o_n and _d_a_t_a might not be
dereferenced until gglluuTTeessssEEnnddPPoollyyggoonn is executed,
all the vertex coordinates but the very last set could be overwritten
before tessellation begins.
Two common symptoms of this problem are consists of a single point
(when a local variable is used for _d_a_t_a) and a
GGLLUU__TTEESSSS__NNEEEEDD__CCOOMMBBIINNEE__CCAALLLLBBAACCKK error (when a local variable is
used for _l_o_c_a_t_i_o_n).
SEE ALSO
gglluuTTeessssBBeeggiinnPPoollyyggoonn((33GG)), gglluuNNeewwTTeessss((33GG)), gglluuTTeessssBBeeggiinnCCoonnttoouurr((33GG)),
gglluuTTeessssCCaallllbbaacckk((33GG)),
gglluuTTeessssPPrrooppeerrttyy((33GG)), gglluuTTeessssNNoorrmmaall((33GG)),
gglluuTTeessssEEnnddPPoollyyggoonn((33GG))