Freigeben über


gluTessCallback-Funktion

Die gluTessCallback-Funktion definiert einen Rückruf für ein Tessellationsobjekt.

Syntax

void WINAPI gluTessCallback(
   GLUtesselator *tess,
   GLenum        which,
   void (CALLBACK *fn)()
);

Parameter

Tess

Das Tessellationsobjekt (erstellt mit gluNewTess).

welche

Der zu definierende Rückruf. Die folgenden Werte sind gültig: GLU_TESS_BEGIN, GLU_TESS_BEGIN_DATA, GLU_TESS_EDGE_FLAG, GLU_TESS_EDGE_FLAG_DATA, GLU_TESS_VERTEX, GLU_TESS_VERTEX_DATA, GLU_TESS_END, GLU_TESS_END_DATA, GLU_TESS_COMBINE, GLU_TESS_COMBINE_DATA, GLU_TESS_ERROR und GLU_TESS_ERROR_DATA.

Weitere Informationen zu diesen Rückrufen finden Sie im abschnitt "Hinweise".

Fn

Die funktion, die aufgerufen werden soll.

Rückgabewert

Diese Funktion gibt keinen Wert zurück.

Bemerkungen

Verwenden Sie gluTessCallback , um einen Rückruf anzugeben, der von einem Tessellationsobjekt verwendet werden soll. Wenn der angegebene Rückruf bereits definiert ist, wird er ersetzt. Wenn fnNULL ist, wird der vorhandene Rückruf undefiniert.

Das Tessellation-Objekt verwendet diese Rückrufe, um zu beschreiben, wie ein von Ihnen angegebenes Polygon in Dreiecke unterteilt wird.

Es gibt zwei Versionen jedes Rückrufs, eine mit Polygondaten, die Sie definieren können, und eine ohne. Wenn beide Versionen eines bestimmten Rückrufs angegeben sind, wird der Rückruf mit den von Ihnen angegebenen Polygondaten verwendet. Der polygon_data Parameter von gluTessBeginPolygon ist eine Kopie des Zeigers, der beim Aufruf von gluTessBeginPolygon angegeben wurde.

Im Folgenden sind gültige Rückrufe aufgeführt:

Rückruf Beschreibung
GLU_TESS_BEGIN Der GLU_TESS_BEGIN Rückruf wird wie glBegin aufgerufen, um den Anfang eines (Dreiecks-)Grundtyps anzugeben. Die Funktion akzeptiert ein einzelnes Argument vom Typ GLenum. Wenn Sie die eigenschaft GLU_TESS_BOUNDARY_ONLY auf GL_FALSE festlegen, wird das Argument entweder auf GL_TRIANGLE_FAN, GL_TRIANGLE_STRIP oder GL_TRIANGLES festgelegt. Wenn Sie die GLU_TESS_BOUNDARY_ONLY-Eigenschaft auf GL_TRUE festlegen, wird das Argument auf GL_LINE_LOOP festgelegt. Der Funktionsprototyp für diesen Rückruf lautet wie folgt: voidbegin (GLenum-Typ);
GLU_TESS_BEGIN_DATA GLU_TESS_BEGIN_DATA ist mit dem GLU_TESS_BEGIN-Rückruf identisch, mit der Ausnahme, dass ein zusätzliches Zeigerargument verwendet wird. Dieser Zeiger ist identisch mit dem undurchsichtigen Zeiger, der beim Aufrufen von gluTessBeginPolygon bereitgestellt wird. Der Funktionsprototyp für diesen Rückruf lautet: voidbeginData (GLenum-Typ, void * polygon_data);
GLU_TESS_EDGE_FLAG Der GLU_TESS_EDGE_FLAG-Rückruf ähnelt glEdgeFlag. Die Funktion verwendet ein einzelnes boolesches Flag, das angibt, welche Kanten auf der Polygongrenze liegen. Wenn das Flag GL_TRUE ist, beginnt jeder folgende Scheitelpunkt einen Rand, der auf der Polygongrenze liegt. d. h. ein Rand, der einen inneren von einem äußeren Bereich trennt. Wenn das Flag GL_FALSE ist, beginnt jeder folgende Scheitelpunkt einen Rand, der im Polygon innen liegt. Der GLU_TESS_EDGE_FLAG Rückruf (sofern definiert) wird aufgerufen, bevor der erste Vertexrückruf durchgeführt wird. Da Dreiecksfächer und Dreiecksstreifen keine Randflags unterstützen, wird der Startrückruf nicht mit GL_TRIANGLE_FAN oder GL_TRIANGLE_STRIP aufgerufen, wenn ein Edgeflagrückruf bereitgestellt wird. Stattdessen werden die Lüfter und Streifen in unabhängige Dreiecke konvertiert. Der Funktionsprototyp für diesen Rückruf lautet:
voidedgeFlag (GLboolean-Flag);
GLU_TESS_EDGE_FLAG_DATA Der GLU_TESS_EDGE_FLAG_DATA-Rückruf ist identisch mit dem GLU_TESS_EDGE_FLAG Rückruf, mit der Ausnahme, dass ein zusätzliches Zeigerargument verwendet wird. Dieser Zeiger ist identisch mit dem undurchsichtigen Zeiger, der beim Aufrufen von gluTessBeginPolygon bereitgestellt wird. Der Funktionsprototyp für diesen Rückruf ist: voidedgeFlagData (GLboolean-Flag, void * polygon_data);
GLU_TESS_VERTEX Der GLU_TESS_VERTEX Rückruf wird zwischen dem Start- und Dem-Ende-Rückruf aufgerufen. Es ähnelt glVertex und definiert die Scheitelpunkte der Dreiecke, die durch den Tessellationsprozess erstellt werden. Die Funktion verwendet einen Zeiger als einziges Argument. Dieser Zeiger ist identisch mit dem undurchsichtigen Zeiger, den Sie beim Definieren des Scheitelpunkts angegeben haben (siehe gluTessVertex). Der Funktionsprototyp für diesen Rückruf lautet: voidvertex (void * vertex_data);
GLU_TESS_VERTEX_DATA Die GLU_TESS_VERTEX_DATA ist identisch mit dem GLU_TESS_VERTEX Rückruf, mit der Ausnahme, dass ein zusätzliches Zeigerargument verwendet wird. Dieser Zeiger ist identisch mit dem undurchsichtigen Zeiger, der beim Aufrufen von gluTessBeginPolygon bereitgestellt wird. Der Funktionsprototyp für diesen Rückruf lautet: voidvertexData (void * vertex_data, void * polygon_data);
GLU_TESS_END Der GLU_TESS_END Rückruf dient demselben Zweck wie glEnd. Es gibt das Ende eines Grundtyps an, und es werden keine Argumente verwendet. Der Funktionsprototyp für diesen Rückruf lautet: voidend (void);
GLU_TESS_END_DATA Der GLU_TESS_END_DATA-Rückruf ist identisch mit dem GLU_TESS_END Rückruf, mit der Ausnahme, dass ein zusätzliches Zeigerargument verwendet wird. Dieser Zeiger ist identisch mit dem undurchsichtigen Zeiger, der beim Aufrufen von gluTessBeginPolygon bereitgestellt wird. Der Funktionsprototyp für diesen Rückruf lautet: voidendData (void * polygon_data);
GLU_TESS_COMBINE Rufen Sie den GLU_TESS_COMBINE Rückruf auf, um einen neuen Scheitelpunkt zu erstellen, wenn die Tessellation eine Schnittmenge erkennt, oder um Features zusammenzuführen. Die Funktion akzeptiert vier Argumente: Ein Array von drei Elementen, jedes vom Typ Gldouble.
Ein Array von vier Zeigern.
Ein Array von vier Elementen, jedes vom Typ GLfloat.
Ein Zeiger auf einen Zeiger.
Der Funktionsprototyp für diesen Rückruf lautet:
voidcombine(GLdoublecoords[3], void * vertex_data[4], GLfloatweight[4], void **outData);
Der Scheitelpunkt ist als lineare Kombination von bis zu vier vorhandenen Scheitelpunkten definiert, die in vertex_data gespeichert werden. Die Koeffizienten der linearen Kombination werden nach Gewicht angegeben; Diese Gewichtungen summieren sich immer auf 1,0. Alle Vertexzeiger sind auch dann gültig, wenn einige der Gewichtungen null sind. Der coords-Parameter gibt die Position des neuen Scheitelpunkts an.
Ordnen Sie einen weiteren Scheitelpunkt zu, interpolieren Sie Parameter mithilfe von vertex_data und Gewichtung, und geben Sie den neuen Vertexzeiger in outData zurück. Dieses Handle wird beim Rendern von Rückrufen bereitgestellt. Geben Sie den Arbeitsspeicher nach dem Aufruf von gluTessEndPolygon frei.
Wenn das Polygon beispielsweise in einer beliebigen Ebene im dreidimensionalen Raum liegt und Sie jedem Scheitelpunkt eine Farbe zuordnen, kann der GLU_TESS_COMBINE Rückruf wie folgt aussehen:
void myCombine( GLdouble coords[3], VERTEX *d[4],                 GLfloat w[4], VERTEX **dataOut ) {     VERTEX *newVertex = new_vertex();     newVertex->x = coords[0];     newVertex->y = coords[1];     newVertex->z = coords[2];     newVertex->r = w[0]*d[0]->r + w[1]*d[1]->r + w[2]*d[2]->r +                    w[3]*d[3]->r;     newVertex->g = w[0]*d[0]->g + w[1]*d[1]->g + w[2]*d[2]->g +                    w[3]*d[3]->g;     newVertex->b = w[0]*d[0]->b + w[1]*d[1]->b + w[2]*d[2]->b +                    w[3]*d[3]->b;     newVertex->a = w[0]*d[0]->a + w[1]*d[1]->a + w[2]*d[2]->a +                    w[3]*d[3]->a;     *dataOut = newVertex; }
Wenn die Tessellation eine Schnittmenge erkennt, muss der GLU_TESS_COMBINE- oder GLU_TESS_COMBINE_DATA-Rückruf (siehe unten) definiert werden und ein Zeiger ohne NULL in dataOut schreiben. Andernfalls tritt der GLU_TESS_NEED_COMBINE_CALLBACK Fehler auf, und es wird keine Ausgabe generiert. (Dies ist der einzige Fehler, der während der Tessellation und des Renderings auftreten kann.)
GLU_TESS_COMBINE_DATA Der GLU_TESS_COMBINE_DATA-Rückruf ist identisch mit dem GLU_TESS_COMBINE Rückruf, mit der Ausnahme, dass ein zusätzliches Zeigerargument verwendet wird. Dieser Zeiger ist identisch mit dem undurchsichtigen Zeiger, der beim Aufrufen von gluTessBeginPolygon bereitgestellt wird. Der Funktionsprototyp für diesen Rückruf lautet: voidcombineData (GLdoublecoords[3], void *vertex_data[4], GLfloatweight[4], void **outData, void * polygon_data);
GLU_TESS_ERROR Der GLU_TESS_ERROR Rückruf wird aufgerufen, wenn ein Fehler auftritt. Das eine Argument ist vom Typ GLenum; Es gibt den spezifischen Fehler an, der aufgetreten ist, und wird auf einen der folgenden Festgelegt: GLU_TESS_MISSING_BEGIN_POLYGON
GLU_TESS_MISSING_END_POLYGON
GLU_TESS_MISSING_BEGIN_CONTOUR
GLU_TESS_MISSING_END_CONTOUR
GLU_TESS_COORD_TOO_LARGE
GLU_TESS_NEED_COMBINE_CALLBACK
Rufen Sie gluErrorString auf, um Zeichenfolgen abzurufen, die diese Fehler beschreiben. Der Funktionsprototyp für diesen Rückruf lautet wie folgt:
voiderror (GLenumerrno);
Die GLU-Bibliothek wird von den ersten vier Fehlern durch Einfügen des fehlenden Aufrufs oder der fehlenden Aufrufe wiederhergestellt. GLU_TESS_COORD_TOO_LARGE gibt an, dass eine Vertexkoordinate die vordefinierte konstante GLU_TESS_MAX_COORD im absoluten Wert überschritten hat und dass der Wert eingespannt wurde. (Koordinatenwerte müssen so klein sein, dass zwei ohne Überlauf miteinander multipliziert werden können.) GLU_TESS_NEED_COMBINE_CALLBACK gibt an, dass die Tessellation eine Schnittmenge zwischen zwei Kanten in den Eingabedaten erkannt hat und der GLU_TESS_COMBINE oder GLU_TESS_COMBINE_DATA Rückruf nicht bereitgestellt wurde. Es wird keine Ausgabe generiert.
GLU_TESS_ERROR_DATA Der GLU_TESS_ERROR_DATA-Rückruf ist mit dem GLU_TESS_ERROR-Rückruf identisch, mit der Ausnahme, dass ein zusätzliches Zeigerargument verwendet wird. Dieser Zeiger ist identisch mit dem undurchsichtigen Zeiger, der beim Aufrufen von gluTessBeginPolygon bereitgestellt wird. Der Funktionsprototyp für diesen Rückruf lautet: voiderrorData (GLenumerrno, void * polygon_data);

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client)
Windows 2000 Professional [nur Desktop-Apps]
Unterstützte Mindestversion (Server)
Windows 2000 Server [nur Desktop-Apps]
Header
Glu.h
Bibliothek
Glu32.lib
DLL
Glu32.dll

Weitere Informationen

glBegin

glEdgeFlag

glEnd

glVertex

gluDeleteTess

gluErrorString

gluNewTess

gluTessBeginPolygon

gluTessEndPolygon

gluTessVertex