gluTessCallback
Aus DGL Wiki
Version vom 9. November 2005, 17:16 Uhr von La Boda (Diskussion | Beiträge)
Inhaltsverzeichnis
Funktionsname
Name
gluTessCallback - Definiert ein Callback für ein Tessellations-Objekt
Delphi-Spezifikation
procedure/function gluTessCallback(tobj : PGLUtriangulatorObj; which : GLenum; fn : Pointer)
Parameter
tobj | Gibt das Tessellationsobjekt an (das mit gluNewTess erzeugt wurde). |
---|---|
which | Gibt das Callback an, das definiert wird. Folgende Konstanten sind zulässig: GLU_BEGIN, GLU_EDGE_FLAG, GLU_VERTEX, GLU_END und GLU_ERROR. |
fn | Gibt die Funktion an, die aufgerufen werden soll. |
Beschreibung
gluTessCallback wird verwendet, um ein tesselliertes Objekt mit einem Callback zu verbinden. Wenn das angegebene Callback bereits definiert wurde, dann wird es ersetzt. Wenn fn nil ist, dann wird das aktuelle Callback gelöscht.
Diese Callbacks werden vom Tessellierungsobjekt dazu verwendet, wie ein benutzerspezifizertes Polygon in Dreiecke zerlegt wird.
Folgende Callbacks sind zulässig:
GLU_BEGIN
- Das "Begin"-Callback wird wie glBegin verwendet, um den Start eines (dreieckigen) Polygons zu bestimmen. Die Funktion übernimmt ein einzelnes Argument des Typs GLenum, das entweder GL_TRIANGLE_FAN, GL_TRIANGLE_STRIP oder GL_TRIANGLES ist.
GLU_EDGE_FLAG
- Das "Edge-Flag"-Callback ist glEdgeFlag ähnlich. Die Funktion übernimmt ein einzelnes Boolean-Flag, das bestimmt, welche Ecken der erzeugten Dreiecke Teil des ursprünglichen, durch den Benutzer festgelegten, Polygons waren zbd welche durch den Tesssellierungsprozess erzeugt wurden. Wenn das Flag GL_TRUE ist, dann fängt jedes Vertex, das dann folgt, eine Ecke an. Wenn das Flag GL_FALSE ist, dann wurde jedes Vertex, das folgt, vom Tessellierer erzeugt. Das "Edge-Flag"-Callback (falls definiert) wird eingebunden, bevor das erste Vertexcallback ausgeführt wird.
- Da Triangle-Fans und -Strips keine Edge-Flags unterstützen, wird dieses Callback nicht mit GL_TRIANGLE_FAN und GL_TRIANLGE_STRIP. Stattdessen werden Fans und Strips in unabhängige Dreiecke zerlegt.
GLU_VERTEX
- Das "Vertex"-Callback liegt zwischen den "Begin-" und "End"-Callbacks. Es ist verwandt mit glVertex, und es legt die Vertices des Dreiecks fest, die durch den Tessellierungsprozess erzeugt werden. Die Funktion nimmt einen Pointer als einziges Argument. Dieser Pointer ist identisch zu dem Pointer, den der Benutzer angegeben hat, als das Vertex generiert wurde (siehe gluTessVertex).
GLU_END
- Das "End"-Callback dient dem selben Zweck wie glEnd. Es legt das Ende des Polygons fest und braucht kein Argument.
GLU_ERROR
- Das "Error"-Callback wird aufgerufen, wenn ein Fehler auftritt. Das Argument ist vom Typ GLenum, und es verweist auf den spezifischen Fehler, der auftritt. Es gibt acht Fehler bei Polygon-Tessellation, benannt GLU_TESS_ERROR1 bis GLU_TESS_ERROR8. Zeichen-Strings, die diese Fehler beschreiben, können per gluErrorString abgerufen werden.
Beispiel
Tessellierte Polygone können so gerendert werden:
gluTessCallback(tobj, GLU_BEGIN, glBegin); gluTessCallback(tobj, GLU_VERTEX, glVertex3dv); gluTessCallback(tobj, GLU_END, glEnd); gluBeginPolygon(tobj); gluTessVertex(tobj, v, v); ... gluEndPolygon(tobj);
Die tessellierten Polygone sollten in einer Displaylist gespeichert werden, so dass nicht in jedem Frame neu tesselliert werden muss.
Siehe auch
glBegin, glEdgeFlag, glVertex, gluDeleteTess, gluErrorString, gluNewTess, gluTessVertex