Leggere in inglese

Condividi tramite


funzione gluTessCallback

La funzione gluTessCallback definisce un callback per un oggetto tessellation.

Sintassi

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

Parametri

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.

Valore restituito

Questa funzione non restituisce un valore.

Commenti

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:
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; }
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);

Requisiti

Requisito Valore
Client minimo supportato
Windows 2000 Professional [solo app desktop]
Server minimo supportato
Windows 2000 Server [solo app desktop]
Intestazione
Glu.h
Libreria
Glu32.lib
DLL
Glu32.dll

Vedi anche

glBegin

glEdgeFlag

glEnd

glVertex

gluDeleteTess

gluErrorString

gluNewTess

gluTessBeginPolygon

gluTessEndPolygon

gluTessVertex