funzione gluTessCallback
La funzione gluTessCallback definisce un callback per un oggetto tessellation.
void WINAPI gluTessCallback(
GLUtesselator *tess,
GLenum which,
void (CALLBACK *fn)()
);
-
Tess
-
Oggetto tessellazione (creato con gluNewTess).
-
Che
-
Callback definito. I valori seguenti sono validi: 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 e GLU_TESS_ERROR_DATA.
Per altre informazioni su questi callback, vedere la sezione Osservazioni seguenti.
-
Fn
-
Funzione da chiamare.
Questa funzione non restituisce un valore.
Usare gluTessCallback per specificare un callback da usare da un oggetto tessellation. Se il callback specificato è già definito, viene sostituito. Se fn è NULL, il callback esistente diventa non definito.
L'oggetto tessellazione usa questi callback per descrivere come un poligono specificato viene suddiviso in triangoli.
Esistono due versioni di ogni callback, una con i dati poligoni che è possibile definire e uno senza. Se vengono specificate entrambe le versioni di un callback specifico, verrà usato il callback con i dati poligono specificati. Il parametro polygon_data di gluTessBeginPolygon è una copia del puntatore specificato quando è stato chiamato gluTessBeginPolygon .
Di seguito sono riportati i callback validi:
Callback | Descrizione |
---|---|
GLU_TESS_BEGIN | Il callback GLU_TESS_BEGIN viene richiamato come glBegin per indicare l'inizio di una primitiva (triangolo). La funzione accetta un singolo argomento di tipo GLenum. Se si imposta la proprietà GLU_TESS_BOUNDARY_ONLY su GL_FALSE, l'argomento è impostato su GL_TRIANGLE_FAN, GL_TRIANGLE_STRIP o GL_TRIANGLES. Se si imposta la proprietà GLU_TESS_BOUNDARY_ONLY su GL_TRUE, l'argomento è impostato su GL_LINE_LOOP. Il prototipo di funzione per questo callback è il seguente: voidbegin (tipoGLenum); |
GLU_TESS_BEGIN_DATA | GLU_TESS_BEGIN_DATA è uguale al callback GLU_TESS_BEGIN, ad eccezione del fatto che accetta un argomento puntatore aggiuntivo. Questo puntatore è identico al puntatore opaco fornito quando si chiama gluTessBeginPolygon. Il prototipo di funzione per questo callback è: voidbeginData (tipoGLenum, void * polygon_data); |
GLU_TESS_EDGE_FLAG | Il callback GLU_TESS_EDGE_FLAG è simile a glEdgeFlag. La funzione accetta un singolo flag booleano che indica quali bordi si trovano sul limite poligono. Se il flag è GL_TRUE, ogni vertice che segue inizia un bordo che si trova sul limite poligono; ovvero, un bordo che separa un'area interna da uno esterno. Se il flag è GL_FALSE, ogni vertice che segue inizia un bordo che si trova nell'interno poligono. Il callback GLU_TESS_EDGE_FLAG (se definito) viene richiamato prima che venga eseguito il callback del primo vertice. Poiché i fan del triangolo e le strisce triangolari non supportano i flag perimetrali, il callback di inizio non viene chiamato con GL_TRIANGLE_FAN o GL_TRIANGLE_STRIP se viene fornito un callback del flag perimetrale. I fan e le strisce vengono invece convertiti in triangoli indipendenti. Il prototipo di funzione per questo callback è: voidedgeFlag (flagGLboolean); |
GLU_TESS_EDGE_FLAG_DATA | Il callback GLU_TESS_EDGE_FLAG_DATA è uguale al callback GLU_TESS_EDGE_FLAG, ad eccezione del fatto che accetta un argomento puntatore aggiuntivo. Questo puntatore è identico al puntatore opaco fornito quando si chiama gluTessBeginPolygon. Il prototipo di funzione per questo callback è: voidedgeFlagData (flagGLboolean, void * polygon_data); |
GLU_TESS_VERTEX | Il callback GLU_TESS_VERTEX viene richiamato tra i callback iniziali e finali. È simile a glVertex e definisce i vertici dei triangoli creati dal processo di tessellazione. La funzione accetta un puntatore come solo argomento. Questo puntatore è identico al puntatore opaco fornito quando è stato definito il vertice (vedere gluTessVertex). Il prototipo di funzione per questo callback è: verticevoid (void * vertex_data); |
GLU_TESS_VERTEX_DATA | Il GLU_TESS_VERTEX_DATA è uguale al callback GLU_TESS_VERTEX, ad eccezione del fatto che accetta un argomento puntatore aggiuntivo. Questo puntatore è identico al puntatore opaco fornito quando si chiama gluTessBeginPolygon. Il prototipo di funzione per questo callback è: voidvertexData (void * vertex_data, void * polygon_data); |
GLU_TESS_END | Il callback GLU_TESS_END serve lo stesso scopo di glEnd. Indica la fine di una primitiva e non accetta argomenti. Il prototipo di funzione per questo callback è: void end (void); |
GLU_TESS_END_DATA | Il callback GLU_TESS_END_DATA è uguale al callback GLU_TESS_END, ad eccezione del fatto che accetta un argomento puntatore aggiuntivo. Questo puntatore è identico al puntatore opaco fornito quando si chiama gluTessBeginPolygon. Il prototipo di funzione per questo callback è: voidendData (void * polygon_data); |
GLU_TESS_COMBINE | Chiamare il callback GLU_TESS_COMBINE per creare un nuovo vertice quando la tessellazione rileva un'intersezione o per unire le funzionalità. La funzione accetta quattro argomenti: matrice di tre elementi, ognuno di tipo Gldouble. Matrice di quattro puntatori. Matrice di quattro elementi, ognuno di tipo GLfloat. Puntatore a un puntatore. Il prototipo di funzione per questo callback è: voidcombine(GLdoublecoords[3], voidvertex_data[4], GLfloatweight[4], void * **outData); Il vertice è definito come combinazione lineare di fino a quattro vertici esistenti, archiviati in vertex_data. I coefficienti della combinazione lineare sono dati dal peso; questi pesi sommano sempre a 1,0. Tutti i puntatori dei vertici sono validi anche quando alcuni dei pesi sono zero. Il parametro coords fornisce la posizione del nuovo vertice. Allocare un altro vertice, interpolare i parametri usando vertex_data e peso e restituire il nuovo puntatore del vertice in outData. Questo handle viene fornito durante il callback di rendering. Liberare la memoria qualche volta dopo aver chiamato gluTessEndPolygon. Ad esempio, se il poligono si trova in un piano arbitrario nello spazio tridimensionale e si associa un colore a ogni vertice, il callback GLU_TESS_COMBINE potrebbe essere simile al seguente: Quando la tessellazione rileva un'intersezione, è necessario definire il callback GLU_TESS_COMBINE o GLU_TESS_COMBINE_DATA (vedere di seguito) e deve scrivere un puntatore non NULL in dataOut. In caso contrario, si verifica l'errore GLU_TESS_NEED_COMBINE_CALLBACK e non viene generato alcun output. Si tratta dell'unico errore che può verificarsi durante la tessellazione e il rendering. |
GLU_TESS_COMBINE_DATA | Il callback GLU_TESS_COMBINE_DATA è uguale al callback GLU_TESS_COMBINE, ad eccezione del fatto che accetta un argomento puntatore aggiuntivo. Questo puntatore è identico al puntatore opaco fornito quando si chiama gluTessBeginPolygon. Il prototipo di funzione per questo callback è: voidcombineData (coordsGLdouble[3], void *vertex_data[4], GLfloatweight[4], voidoutData, void * **polygon_data); |
GLU_TESS_ERROR | Il callback GLU_TESS_ERROR viene chiamato quando viene rilevato un errore. L'argomento è di tipo GLenum; indica l'errore specifico che si è verificato ed è impostato su uno dei seguenti elementi: 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 Chiamare gluErrorString per recuperare le stringhe di caratteri che descrivono questi errori. Il prototipo di funzione per questo callback è il seguente: errore void (GLenumerrno); La libreria GLU recupera dai primi quattro errori inserendo la chiamata o le chiamate mancanti. GLU_TESS_COORD_TOO_LARGE indica che alcune coordinate del vertice superano la costante predefinita GLU_TESS_MAX_COORD in valore assoluto e che il valore è stato bloccato. I valori di coordinata devono essere abbastanza piccoli che due possono essere moltiplicati insieme senza overflow. GLU_TESS_NEED_COMBINE_CALLBACK indica che la tessellazione ha rilevato un'intersezione tra due bordi nei dati di input e il callback GLU_TESS_COMBINE o GLU_TESS_COMBINE_DATA non è stato fornito. Non verrà generato alcun output. |
GLU_TESS_ERROR_DATA | Il callback GLU_TESS_ERROR_DATA è uguale al callback GLU_TESS_ERROR, ad eccezione del fatto che accetta un argomento puntatore aggiuntivo. Questo puntatore è identico al puntatore opaco fornito quando si chiama gluTessBeginPolygon. Il prototipo di funzione per questo callback è: voiderrorData (GLenumerrno, void * polygon_data); |
Requisito | Valore |
---|---|
Client minimo supportato |
Windows 2000 Professional [solo app desktop] |
Server minimo supportato |
Windows 2000 Server [solo app desktop] |
Intestazione |
|
Libreria |
|
DLL |
|