Função gluTessCallback

A função gluTessCallback define um retorno de chamada para um objeto tessellation.

Sintaxe

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

Parâmetros

Tess

O objeto de mosaico (criado com gluNewTess).

Que

O retorno de chamada que está sendo definido. Os seguintes valores são 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 e GLU_TESS_ERROR_DATA.

Para obter mais informações sobre esses retornos de chamada, consulte a seção Comentários a seguir.

Fn

A função a ser chamada.

Retornar valor

Essa função não retorna um valor.

Comentários

Use gluTessCallback para especificar um retorno de chamada a ser usado por um objeto de mosaico. Se o retorno de chamada especificado já estiver definido, ele será substituído. Se fn for NULL, o retorno de chamada existente ficará indefinido.

O objeto tessellation usa esses retornos de chamada para descrever como um polígono especificado é dividido em triângulos.

Há duas versões de cada retorno de chamada, uma com dados de polígono que você pode definir e outra sem. Se ambas as versões de um retorno de chamada específico forem especificadas, o retorno de chamada com os dados de polígono especificados será usado. O parâmetro polygon_data de gluTessBeginPolygon é uma cópia do ponteiro que foi especificado quando gluTessBeginPolygon foi chamado.

Veja a seguir os retornos de chamada válidos:

Callback Descrição
GLU_TESS_BEGIN O retorno de chamada GLU_TESS_BEGIN é invocado como glBegin para indicar o início de um primitivo (triângulo). A função usa um único argumento do tipo GLenum. Se você definir a propriedade GLU_TESS_BOUNDARY_ONLY como GL_FALSE, o argumento será definido como GL_TRIANGLE_FAN, GL_TRIANGLE_STRIP ou GL_TRIANGLES. Se você definir a propriedade GLU_TESS_BOUNDARY_ONLY como GL_TRUE, o argumento será definido como GL_LINE_LOOP. O protótipo de função para esse retorno de chamada é o seguinte: voidbegin (GLenumtype);
GLU_TESS_BEGIN_DATA GLU_TESS_BEGIN_DATA é o mesmo que o retorno de chamada GLU_TESS_BEGIN, exceto que ele usa um argumento de ponteiro adicional. Esse ponteiro é idêntico ao ponteiro opaco fornecido quando você chama gluTessBeginPolygon. O protótipo de função para esse retorno de chamada é: voidbeginData (GLenumtype, void * polygon_data);
GLU_TESS_EDGE_FLAG O retorno de chamada GLU_TESS_EDGE_FLAG é semelhante ao glEdgeFlag. A função usa um único sinalizador booliano que indica quais bordas estão no limite do polígono. Se o sinalizador for GL_TRUE, cada vértice a seguir iniciará uma borda que está no limite do polígono; ou seja, uma borda que separa uma região interior de um exterior. Se o sinalizador for GL_FALSE, cada vértice a seguir iniciará uma borda que está no interior do polígono. O retorno de chamada GLU_TESS_EDGE_FLAG (se definido) é invocado antes que o primeiro retorno de chamada de vértice seja feito. Como os ventiladores de triângulo e as faixas de triângulo não dão suporte a sinalizadores de borda, o retorno de chamada inicial não é chamado com GL_TRIANGLE_FAN ou GL_TRIANGLE_STRIP se um retorno de chamada do sinalizador de borda for fornecido. Em vez disso, os ventiladores e faixas são convertidos em triângulos independentes. O protótipo de função para esse retorno de chamada é:
voidedgeFlag (GLbooleanflag);
GLU_TESS_EDGE_FLAG_DATA O retorno de chamada GLU_TESS_EDGE_FLAG_DATA é o mesmo que o retorno de chamada GLU_TESS_EDGE_FLAG, exceto que ele usa um argumento de ponteiro adicional. Esse ponteiro é idêntico ao ponteiro opaco fornecido quando você chama gluTessBeginPolygon. O protótipo de função para esse retorno de chamada é: voidedgeFlagData (GLbooleanflag, void * polygon_data);
GLU_TESS_VERTEX O retorno de chamada GLU_TESS_VERTEX é invocado entre os retornos de chamada inicial e final. É semelhante a glVertex e define os vértices dos triângulos criados pelo processo de mosaico. A função usa um ponteiro como seu único argumento. Esse ponteiro é idêntico ao ponteiro opaco que você forneceu quando definiu o vértice (consulte gluTessVertex). O protótipo de função para esse retorno de chamada é: voidvertex (void * vertex_data);
GLU_TESS_VERTEX_DATA O GLU_TESS_VERTEX_DATA é o mesmo que o retorno de chamada GLU_TESS_VERTEX, exceto que ele usa um argumento de ponteiro adicional. Esse ponteiro é idêntico ao ponteiro opaco fornecido quando você chama gluTessBeginPolygon. O protótipo de função para esse retorno de chamada é: voidvertexData (void * vertex_data, void * polygon_data);
GLU_TESS_END O retorno de chamada GLU_TESS_END serve ao mesmo propósito que glEnd. Indica o fim de um primitivo e não usa argumentos. O protótipo de função para esse retorno de chamada é: voidend (void);
GLU_TESS_END_DATA O retorno de chamada GLU_TESS_END_DATA é o mesmo que o retorno de chamada GLU_TESS_END, exceto que ele usa um argumento de ponteiro adicional. Esse ponteiro é idêntico ao ponteiro opaco fornecido quando você chama gluTessBeginPolygon. O protótipo de função para esse retorno de chamada é: voidendData (void * polygon_data);
GLU_TESS_COMBINE Chame o retorno de chamada GLU_TESS_COMBINE para criar um novo vértice quando o mosaico detectar uma interseção ou mesclar recursos. A função usa quatro argumentos: uma matriz de três elementos, cada um do tipo Gldouble.
Uma matriz de quatro ponteiros.
Uma matriz de quatro elementos, cada um do tipo GLfloat.
Um ponteiro para um ponteiro.
O protótipo de função para esse retorno de chamada é:
voidcombine(GLdoublecoords[3], void * vertex_data[4], GLfloatweight[4], voidoutData **);
O vértice é definido como uma combinação linear de até quatro vértices existentes, armazenados em vertex_data. Os coeficientes da combinação linear são dados por peso; esses pesos sempre somam 1,0. Todos os ponteiros de vértice são válidos mesmo quando alguns dos pesos são zero. O parâmetro coords fornece o local do novo vértice.
Aloque outro vértice, interpole parâmetros usando vertex_data e peso e retorne o novo ponteiro de vértice em outData. Esse identificador é fornecido durante a renderização de retornos de chamada. Libere a memória algum tempo depois de chamar gluTessEndPolygon.
Por exemplo, se o polígono estiver em um plano arbitrário no espaço tridimensional e você associar uma cor a cada vértice, o retorno de chamada GLU_TESS_COMBINE poderá ser semelhante ao seguinte:
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 o mosaico detecta uma interseção, o retorno de chamada GLU_TESS_COMBINE ou GLU_TESS_COMBINE_DATA (veja abaixo) deve ser definido e deve gravar um ponteiro não NULL no dataOut. Caso contrário, o erro GLU_TESS_NEED_COMBINE_CALLBACK ocorrerá e nenhuma saída será gerada. (Este é o único erro que pode ocorrer durante o mosaico e a renderização.)
GLU_TESS_COMBINE_DATA O retorno de chamada GLU_TESS_COMBINE_DATA é o mesmo que o retorno de chamada GLU_TESS_COMBINE, exceto que ele usa um argumento de ponteiro adicional. Esse ponteiro é idêntico ao ponteiro opaco fornecido quando você chama gluTessBeginPolygon. O protótipo de função para esse retorno de chamada é: voidcombineData (GLdoublecoords[3], void *vertex_data[4], GLfloatweight[4], voidoutData **, void * polygon_data);
GLU_TESS_ERROR O retorno de chamada GLU_TESS_ERROR é chamado quando um erro é encontrado. O único argumento é do tipo GLenum; indica o erro específico que ocorreu e é definido como um dos seguintes: 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
Chame gluErrorString para recuperar cadeias de caracteres que descrevem esses erros. O protótipo de função para esse retorno de chamada é o seguinte:
voiderror (GLenumerrno);
A biblioteca GLU se recupera dos quatro primeiros erros inserindo a chamada ou as chamadas ausentes. GLU_TESS_COORD_TOO_LARGE indica que algumas coordenadas de vértice excederam a constante predefinida GLU_TESS_MAX_COORD em valor absoluto e que o valor foi fixado. (Os valores de coordenada devem ser pequenos o suficiente para que dois possam ser multiplicados juntos sem estouro.) GLU_TESS_NEED_COMBINE_CALLBACK indica que a tessellação detectou uma interseção entre duas bordas nos dados de entrada e o retorno de chamada GLU_TESS_COMBINE ou GLU_TESS_COMBINE_DATA não foi fornecido. Nenhuma saída será gerada.
GLU_TESS_ERROR_DATA O retorno de chamada GLU_TESS_ERROR_DATA é o mesmo que o retorno de chamada GLU_TESS_ERROR, exceto que ele usa um argumento de ponteiro adicional. Esse ponteiro é idêntico ao ponteiro opaco fornecido quando você chama gluTessBeginPolygon. O protótipo de função para esse retorno de chamada é: voiderrorData (GLenumerrno, void * polygon_data);

Requisitos

Requisito Valor
Cliente mínimo com suporte
Windows 2000 Professional [somente aplicativos da área de trabalho]
Servidor mínimo com suporte
Windows 2000 Server [somente aplicativos da área de trabalho]
Cabeçalho
Glu.h
Biblioteca
Glu32.lib
DLL
Glu32.dll

Confira também

glBegin

glEdgeFlag

glEnd

glVertex

gluDeleteTess

gluErrorString

gluNewTess

gluTessBeginPolygon

gluTessEndPolygon

gluTessVertex