Функция не вызывается для примитивов GL_TRIANGLE_FAN или GL_TRIANGLE_STRIP. Вместо этого треугольники преобразуются в независимые треугольники. Прототип функции имеет следующий вид:

void edgeFlag(GLboolean flag);

• GLU_TESS_EDGE_FLAG_DATA - аналогично предыдущему, но с дополнительным аргументом. Прототип функции имеет следующий вид:

void edgeFlagData(GLboolean flag,void* polygon_data);

• GLU_TESS_VERTEX - подобно функции glVertex определяет вершины треугольников, созданных процессом составления мозаики. Прототип функции имеет следующий вид:

void vertex(void*vertex_data);

• GLU_TESS_VERTEX_DATA - аналогично предыдущему, но с дополнительным аргументом. Прототип функции имеет следующий вид:

void vertexData(void*vertex_data,void*polygon_data);

• GLU_TESS_END - подобно функции glEnd указывает на конец примитива. Прототип функции имеет следующий вид:

void end();

• GLU_TESS_END_DATA - аналогично предыдущему, но с дополнительным аргументом. Прототип функции имеет следующий вид:

void endData(void*polygon_data);

• GLU_TESS_COMBINE - вызывается для создания новой вершины, когда обнаруживается пересечение или слияние.

Функция имеет четыре аргумента: массив из трех элементов типа GLdouble, массив из четырех элементов типа GLfloat и указатель на указатель. Прототип функции имеет следующий вид:

void combine(GLdouble coords[3], void*vertex_data[4],GLfloat weight[4], void**outData); Вершина определяется как линейная комбинация до четырех существующих вершин в vertex_data. Коэффициенты линейной комбинации даются как веса, сумма которых всегда 1.0. Аргумент coords дает местоположение новой вершины. Разместите другую вершину, интерполируйте параметры, используя vertex_data и weight, и возвратите новый указатель вершины в outData. Освободите память когда-нибудь после вызова gluTessEndPolygon.

Например, если многоугольник находится в произвольной плоскости в трехмерном пространстве и с каждой вершиной ассоциируется цвет, то GLU_TESS_COMBINE функция могла бы выглядеть следующим образом:

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[l]*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[l]*d[1]->b+ w[2]* d[2 J->b+w[3]*d[3]->b; newVertex->a=w[0]*d[0]->a+w[l]*d[1]->a+ w[2] *d[2]->a+w[3]*d[3]->a;

*dataOut=newVertex;

)

Когда определяется пересечение GLU_TESS_COMBINE или GLU_TESS_COMBINE_DATA, функция обратного вызова должна быть определена и записывать в dataOut не нулевой указатель. Иначе произойдет ошибка.

• GLU_TESS_COMBINE_DATA - аналогично предыдущему, но с дополнительным параметром. Прототип функции имеет следующий вид:

void combineData(GLdouble coords[3], void*vertex_data[4],GLfloat weight[4], void**outData,void*polygon_data);


⇐ вернуться назад | | далее ⇒