Compartir a través de


Función gluTessCallback

La función gluTessCallback define una devolución de llamada para un objeto de teselación.

Sintaxis

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

Parámetros

Tess

Objeto de teselación (creado con gluNewTess).

Que

Devolución de llamada que se va a definir. Los valores siguientes son válidos: 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 y GLU_TESS_ERROR_DATA.

Para obtener más información sobre estas devoluciones de llamada, consulte la siguiente sección Comentarios.

fn

Función a la que se va a llamar.

Valor devuelto

Esta función no devuelve ningún valor.

Observaciones

Use gluTessCallback para especificar una devolución de llamada que usará un objeto de teselación. Si la devolución de llamada especificada ya está definida, se reemplaza. Si fn es NULL, la devolución de llamada existente deja de definirse.

El objeto de teselación usa estas devoluciones de llamada para describir cómo se divide un polígono especificado en triángulos.

Hay dos versiones de cada devolución de llamada, una con datos de polígono que puede definir y otra sin. Si se especifican ambas versiones de una devolución de llamada determinada, se usará la devolución de llamada con los datos de polígono que especifique. El parámetro polygon_data de gluTessBeginPolygon es una copia del puntero que se especificó cuando se llamó a gluTessBeginPolygon .

A continuación se muestran devoluciones de llamada válidas:

Devolución de llamada Descripción
GLU_TESS_BEGIN El GLU_TESS_BEGIN devolución de llamada se invoca como glBegin para indicar el inicio de un primitivo (triángulo). La función toma un único argumento de tipo GLenum. Si establece la propiedad GLU_TESS_BOUNDARY_ONLY en GL_FALSE, el argumento se establece en GL_TRIANGLE_FAN, GL_TRIANGLE_STRIP o GL_TRIANGLES. Si establece la propiedad GLU_TESS_BOUNDARY_ONLY en GL_TRUE, el argumento se establece en GL_LINE_LOOP. El prototipo de función para esta devolución de llamada es el siguiente: voidbegin (tipoGLenum);
GLU_TESS_BEGIN_DATA GLU_TESS_BEGIN_DATA es el mismo que la devolución de llamada GLU_TESS_BEGIN, salvo que toma un argumento de puntero adicional. Este puntero es idéntico al puntero opaco proporcionado al llamar a gluTessBeginPolygon. El prototipo de función para esta devolución de llamada es: voidbeginData (tipoGLenum, void * polygon_data);
GLU_TESS_EDGE_FLAG La devolución de llamada GLU_TESS_EDGE_FLAG es similar a glEdgeFlag. La función toma una sola marca booleana que indica qué bordes se encuentran en el límite del polígono. Si la marca es GL_TRUE, cada vértice que sigue comienza un borde que se encuentra en el límite del polígono; es decir, un borde que separa una región interior de una exterior. Si la marca es GL_FALSE, cada vértice que sigue comienza un borde que se encuentra en el interior del polígono. La devolución de llamada GLU_TESS_EDGE_FLAG (si se define) se invoca antes de que se realice la primera devolución de llamada de vértice. Dado que los ventiladores de triángulo y las franjas de triángulos no admiten marcas perimetrales, no se llama a la devolución de llamada de inicio con GL_TRIANGLE_FAN o GL_TRIANGLE_STRIP si se proporciona una devolución de llamada de marca de borde. En su lugar, los ventiladores y tiras se convierten en triángulos independientes. El prototipo de función para esta devolución de llamada es:
voidedgeFlag (marca GLboolean);
GLU_TESS_EDGE_FLAG_DATA La devolución de llamada GLU_TESS_EDGE_FLAG_DATA es la misma que la GLU_TESS_EDGE_FLAG devolución de llamada, salvo que toma un argumento de puntero adicional. Este puntero es idéntico al puntero opaco proporcionado al llamar a gluTessBeginPolygon. El prototipo de función para esta devolución de llamada es: voidedgeFlagData (marca GLboolean, void * polygon_data);
GLU_TESS_VERTEX La devolución de llamada GLU_TESS_VERTEX se invoca entre las devoluciones de llamada inicial y final. Es similar a glVertex y define los vértices de los triángulos creados por el proceso de teselación. La función toma un puntero como único argumento. Este puntero es idéntico al puntero opaco que proporcionó al definir el vértice (consulte gluTessVertex). El prototipo de función para esta devolución de llamada es: vérticevoid (void * vertex_data);
GLU_TESS_VERTEX_DATA El GLU_TESS_VERTEX_DATA es el mismo que el GLU_TESS_VERTEX devolución de llamada, salvo que toma un argumento de puntero adicional. Este puntero es idéntico al puntero opaco proporcionado al llamar a gluTessBeginPolygon. El prototipo de función para esta devolución de llamada es: voidvertexData (void * vertex_data, void * polygon_data);
GLU_TESS_END La devolución de llamada GLU_TESS_END tiene el mismo propósito que glEnd. Indica el final de un primitivo y no toma ningún argumento. El prototipo de función para esta devolución de llamada es: void end (void);
GLU_TESS_END_DATA La devolución de llamada GLU_TESS_END_DATA es la misma que la devolución de llamada GLU_TESS_END, salvo que toma un argumento de puntero adicional. Este puntero es idéntico al puntero opaco proporcionado al llamar a gluTessBeginPolygon. El prototipo de función para esta devolución de llamada es: voidendData (void * polygon_data);
GLU_TESS_COMBINE Llame a la devolución de llamada GLU_TESS_COMBINE para crear un nuevo vértice cuando la teselación detecte una intersección o para combinar características. La función toma cuatro argumentos: una matriz de tres elementos, cada uno de tipo Gldouble.
Matriz de cuatro punteros.
Matriz de cuatro elementos, cada uno de tipo GLfloat.
Puntero a un puntero.
El prototipo de función para esta devolución de llamada es:
voidcombine(GLdoublecoords[3], void * vertex_data[4], GLfloatweight[4], void **outData);
El vértice se define como una combinación lineal de hasta cuatro vértices existentes, almacenados en vertex_data. Los coeficientes de la combinación lineal se dan por peso; estos pesos siempre suman 1,0. Todos los punteros de vértice son válidos incluso cuando algunos de los pesos son cero. El parámetro coords proporciona la ubicación del nuevo vértice.
Asigne otro vértice, interpole parámetros mediante vertex_data y peso, y devuelva el nuevo puntero de vértice en outData. Este identificador se proporciona durante las devoluciones de llamada de representación. Libere la memoria en algún momento después de llamar a gluTessEndPolygon.
Por ejemplo, si el polígono se encuentra en un plano arbitrario en un espacio tridimensional y asocia un color a cada vértice, la devolución de llamada de GLU_TESS_COMBINE podría ser similar a la siguiente:
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; }
Cuando la teselación detecta una intersección, se debe definir la devolución de llamada GLU_TESS_COMBINE o GLU_TESS_COMBINE_DATA (ver a continuación) y debe escribir un puntero que no sea NULL en dataOut. De lo contrario, se produce el error de GLU_TESS_NEED_COMBINE_CALLBACK y no se genera ninguna salida. (Este es el único error que puede producirse durante la teselación y la representación).
GLU_TESS_COMBINE_DATA La devolución de llamada GLU_TESS_COMBINE_DATA es la misma que la devolución de llamada GLU_TESS_COMBINE, excepto que toma un argumento de puntero adicional. Este puntero es idéntico al puntero opaco proporcionado al llamar a gluTessBeginPolygon. El prototipo de función para esta devolución de llamada es: voidcombineData (GLdoublecoords[3], void *vertex_data[4], GLfloatweight[4], void **outData, void * polygon_data);
GLU_TESS_ERROR Se llama a la devolución de llamada GLU_TESS_ERROR cuando se encuentra un error. El único argumento es de tipo GLenum; indica el error específico que se ha producido y se establece en uno de los siguientes: 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
Llame a gluErrorString para recuperar cadenas de caracteres que describen estos errores. El prototipo de función para esta devolución de llamada es el siguiente:
voiderror (GLenumerrno);
La biblioteca GLU se recupera de los cuatro primeros errores insertando la llamada o las llamadas que faltan. GLU_TESS_COORD_TOO_LARGE indica que alguna coordenada de vértice superó la constante predefinida GLU_TESS_MAX_COORD en el valor absoluto y que el valor se ha fijado. (Los valores de coordenada deben ser lo suficientemente pequeños como para que dos se puedan multiplicar juntos sin desbordamiento). GLU_TESS_NEED_COMBINE_CALLBACK indica que la teselación detectó una intersección entre dos bordes de los datos de entrada y no se proporcionó la devolución de llamada GLU_TESS_COMBINE o GLU_TESS_COMBINE_DATA. No se generará ninguna salida.
GLU_TESS_ERROR_DATA La devolución de llamada GLU_TESS_ERROR_DATA es la misma que la devolución de llamada GLU_TESS_ERROR, excepto que toma un argumento de puntero adicional. Este puntero es idéntico al puntero opaco proporcionado al llamar a gluTessBeginPolygon. El prototipo de función para esta devolución de llamada es: voiderrorData (GLenumerrno, void * polygon_data);

Requisitos

Requisito Value
Cliente mínimo compatible
Windows 2000 Professional [solo aplicaciones de escritorio]
Servidor mínimo compatible
Windows 2000 Server [solo aplicaciones de escritorio]
Encabezado
Glu.h
Biblioteca
Glu32.lib
Archivo DLL
Glu32.dll

Consulte también

glBegin

glEdgeFlag

glEnd

glVertex

gluDeleteTess

gluErrorString

gluNewTess

gluTessBeginPolygon

gluTessEndPolygon

gluTessVertex