Angeben von Rückrufen
Sie können bis zu fünf Rückruffunktionen für eine Tesselierung festlegen. Alle Funktionen, die Sie nicht angeben, werden während der Tesselierung nicht aufgerufen, und Sie erhalten keine Informationen, die sie möglicherweise zurückgegeben haben. Sie geben die Rückruffunktionen mit gluTessCallback an.
Die gluTessCallback-Funktion ordnet die Rückruffunktion fn dem Tessellierungsobjekt tessobj zu. Der Typ des Rückrufs wird durch den Parameter type bestimmt, der GLU_BEGIN, GLU_EDGE_FLAG, GLU_VERTEX, GLU_END oder GLU_ERROR sein kann. Die fünf möglichen Rückruffunktionen verfügen über die folgenden Prototypen.
Rückruffunktion | Prototyp |
---|---|
GLU_BEGIN | void begin(GLenumtype ); |
GLU_EDGE_FLAG | void edgeFlag(GLbooleanflag ); |
GLU_VERTEX | void vertex(**void ***data ); |
GLU_END | void end(void ); |
GLU_ERROR | void error(GLenumerrno ); |
Um eine Rückruffunktion zu ändern, rufen Sie gluTessCallback mit der neuen Funktion auf. Um eine Rückruffunktion zu beseitigen, ohne sie durch eine neue zu ersetzen, übergeben Sie an gluTessCallback einen Nullzeiger für die entsprechende Funktion.
Wenn die Tessellierung fortgesetzt wird, werden die Rückruffunktionen ähnlich wie die OpenGL-Funktionen glBegin, glEdgeFlag, glVertex und glEnd aufgerufen.
Die GLU_BEGIN-Rückruffunktion wird mit einem von drei möglichen Parametern aufgerufen:
- GL_TRIANGLE_FAN
- GL_TRIANGLE_STRIP
- GL_TRIANGLES
Nach dem Aufrufen der GLU_BEGIN-Rückruffunktion und vor dem Aufrufen der GLU_END zugeordneten Rückruffunktion wird eine Kombination der GLU_EDGE_FLAG- und GLU_VERTEX-Rückrufe aufgerufen. Die zugeordneten Scheitelpunkte und Edgeflags werden genau so interpretiert, wie sie sich in OpenGL zwischen glBegin(GL_TRIANGLE_FAN), glBegin(GL_TRIANGLE_STRIP), or glBegin(GL_TRIANGLES**)** und entsprechend glEnd befinden.
in einem Dreiecksfächer oder Dreiecksstreifen keinen Sinn ergeben, wird bei einer mit GLU_EDGE_FLAG verknüpften Rückruffunktion der GLU_BEGIN-Rückruf nur mit GL_TRIANGLES aufgerufen. Die GLU_EDGE_FLAG-Rückruffunktion funktioniert analog zur glEdgeFlag-Funktion von OpenGL.
Wenn während der Tessellierung ein Fehler auftritt, wird die fehlerhafte Rückruffunktion aufgerufen. Der Fehlerrückruffunktion wird eine GLU-Fehlernummer übergeben. Sie können eine Zeichenfolge abrufen, die den Fehler mit der gluErrorString-Funktion beschreibt.