gluTessCallback

Aus DGL Wiki
Version vom 10. März 2009, 20:21 Uhr von DGLBot (Diskussion | Beiträge) (Der Ausdruck ''<pascal>(.*?)</pascal>'' wurde ersetzt mit ''<source lang="pascal">$1</source>''.)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

Funktionsname

Name

gluTessCallback - Definiert ein Callback für ein Tessellations-Objekt


Delphi-Spezifikation

procedure 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