gluTessCallback 函数

gluTessCallback 函数定义细化对象的回调。

语法

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

参数

苔 丝

使用 gluNewTess) 创建的细化对象 (。

其中

正在定义的回调。 以下值有效: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 和 GLU_TESS_ERROR_DATA。

有关这些回调的详细信息,请参阅以下“备注”部分。

fn

要调用的函数。

返回值

此函数不返回值。

注解

使用 gluTessCallback 指定要由分割对象使用的回调。 如果已定义指定的回调,则将其替换。 如果 fnNULL,则现有回调将变为未定义。

分割对象使用这些回调来描述你指定的多边形如何分解为三角形。

每个回调有两个版本,一个版本包含可以定义的多边形数据,另一个没有。 如果指定了特定回调的两个版本,则将使用具有指定的多边形数据的回调。 gluTessBeginPolygonpolygon_data参数是调用 gluTessBeginPolygon 时指定的指针的副本。

以下是有效的回调:

回调 说明
GLU_TESS_BEGIN 调用GLU_TESS_BEGIN回调类似于 glBegin ,以指示基元) (三角形的开始。 函数采用 GLenum 类型的单个参数。 如果将 GLU_TESS_BOUNDARY_ONLY 属性设置为 GL_FALSE,则参数设置为 GL_TRIANGLE_FAN、GL_TRIANGLE_STRIP 或 GL_TRIANGLES。 如果将 GLU_TESS_BOUNDARY_ONLY 属性设置为 GL_TRUE,则参数设置为 GL_LINE_LOOP。 此回调的函数原型如下: voidbegin (GLenum类型) ;
GLU_TESS_BEGIN_DATA GLU_TESS_BEGIN_DATA与GLU_TESS_BEGIN回调相同,只不过它采用附加的指针参数。 此指针与调用 gluTessBeginPolygon 时提供的不透明指针相同。 此回调的函数原型为: voidbeginData (GLenum类型void * polygon_data) ;
GLU_TESS_EDGE_FLAG GLU_TESS_EDGE_FLAG回调类似于 glEdgeFlag。 函数采用一个布尔标志,用于指示多边形边界上的哪些边缘。 如果标志GL_TRUE,则后面的每个顶点都将开始位于多边形边界上的边缘;也就是说,将内部区域与外部区域分开的边缘。 如果标志GL_FALSE,则后面的每个顶点都开始一个位于多边形内部的边缘。 如果在执行第一个顶点回调之前调用定义的) ,则GLU_TESS_EDGE_FLAG回调 (。 由于三角形扇形和三角形带不支持边缘标志,因此,如果提供了边缘标志回调,则不会使用GL_TRIANGLE_FAN或GL_TRIANGLE_STRIP调用开始回调。 相反,风扇和条带将转换为独立的三角形。 此回调的函数原型为:
voidedgeFlag (GLbooleanflag) ;
GLU_TESS_EDGE_FLAG_DATA GLU_TESS_EDGE_FLAG_DATA回调与GLU_TESS_EDGE_FLAG回调相同,只不过它采用额外的指针参数。 此指针与调用 gluTessBeginPolygon 时提供的不透明指针相同。 此回调的函数原型为: voidedgeFlagData (GLboolean标志void * polygon_data) ;
GLU_TESS_VERTEX 在开始回调和结束回调之间调用GLU_TESS_VERTEX回调。 它类似于 glVertex ,它定义细化过程创建的三角形的顶点。 函数将指针作为其唯一参数。 此指针与定义顶点时提供的不透明指针相同, (请参阅 gluTessVertex) 。 此回调的函数原型为: void顶点 (void * vertex_data) ;
GLU_TESS_VERTEX_DATA GLU_TESS_VERTEX_DATA与GLU_TESS_VERTEX回调相同,只不过它采用额外的指针参数。 此指针与调用 gluTessBeginPolygon 时提供的不透明指针相同。 此回调的函数原型为: voidvertexData (void * vertex_datavoid * polygon_data) ;
GLU_TESS_END GLU_TESS_END回调的作用与 glEnd 相同。 它指示基元的结尾,并且不采用任何参数。 此回调的函数原型为: voidend (void) ;
GLU_TESS_END_DATA GLU_TESS_END_DATA回调与GLU_TESS_END回调相同,只不过它采用额外的指针参数。 此指针与调用 gluTessBeginPolygon 时提供的不透明指针相同。 此回调的函数原型为: voidendData (void * polygon_data) ;
GLU_TESS_COMBINE 调用GLU_TESS_COMBINE回调,以在细化检测到交集时创建新顶点,或合并特征。 函数采用四个参数:一个由三个元素构成的数组,每个元素的类型为 Gldouble。
一个由四个指针构成的数组。
一个由四个元素构成的数组,每个元素的类型为 GLfloat。
指向指针的指针。
此回调的函数原型为:
voidcombine (GLdoublecoords[3], void * vertex_data[4], GLfloatweight[4], void **outData) ;
顶点定义为最多四个现有顶点的线性组合,存储在vertex_data中。 线性组合的系数按权重给出;这些权重总和为 1.0。 即使某些权重为零,所有顶点指针也有效。 coords 参数提供新顶点的位置。
分配另一个顶点,使用vertex_data和权重内插参数,并在 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[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; }
当细化检测到交集时,必须定义GLU_TESS_COMBINE或GLU_TESS_COMBINE_DATA回调 (下面的) ,并且必须将非 NULL 指针写入 dataOut。 否则,会发生GLU_TESS_NEED_COMBINE_CALLBACK错误,并且不会生成任何输出。 (这是细化和渲染期间可能发生的唯一错误。)
GLU_TESS_COMBINE_DATA GLU_TESS_COMBINE_DATA回调与GLU_TESS_COMBINE回调相同,只不过它采用附加的指针参数。 此指针与调用 gluTessBeginPolygon 时提供的不透明指针相同。 此回调的函数原型为: voidcombineData (GLdoublecoords[3]、 void *vertex_data[4]、 GLfloatweight[4]、 void **outDatavoid * polygon_data) ;
GLU_TESS_ERROR 遇到错误时,将调用GLU_TESS_ERROR回调。 一个参数的类型为 GLenum;它指示发生的特定错误,并设置为以下值之一: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
调用 gluErrorString 以检索描述这些错误的字符串。 此回调的函数原型如下所示:
void错误 (GLenumerrno) ;
GLU 库通过插入缺少的调用或调用从前四个错误中恢复。 GLU_TESS_COORD_TOO_LARGE指示某些顶点坐标在绝对值GLU_TESS_MAX_COORD超过了预定义常量,并且值已被固定。 (坐标值必须足够小,才能将两个值相乘而不溢出。) GLU_TESS_NEED_COMBINE_CALLBACK表示分割检测到输入数据中两个边缘之间的交集,并且未提供GLU_TESS_COMBINE或GLU_TESS_COMBINE_DATA回调。 不会生成任何输出。
GLU_TESS_ERROR_DATA GLU_TESS_ERROR_DATA回调与GLU_TESS_ERROR回调相同,只不过它采用附加的指针参数。 此指针与调用 gluTessBeginPolygon 时提供的不透明指针相同。 此回调的函数原型是: voiderrorData (GLenumerrnovoid * polygon_data) ;

要求

要求
最低受支持的客户端
Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器
Windows 2000 Server [仅限桌面应用]
标头
Glu.h

Glu32.lib
DLL
Glu32.dll

另请参阅

glBegin

glEdgeFlag

glEnd

glVertex

gluDeleteTess

gluErrorString

gluNewTess

gluTessBeginPolygon

gluTessEndPolygon

gluTessVertex