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 指定要由分割对象使用的回调。 如果已定义指定的回调,则将其替换。 如果 fn 为 NULL,则现有回调将变为未定义。
分割对象使用这些回调来描述你指定的多边形如何分解为三角形。
每个回调有两个版本,一个版本包含可以定义的多边形数据,另一个没有。 如果指定了特定回调的两个版本,则将使用具有指定的多边形数据的回调。 gluTessBeginPolygon 的polygon_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_data, void * 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回调可能如下所示: 当细化检测到交集时,必须定义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 **outData、 void * 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 (GLenumerrno, void * polygon_data) ; |
要求 | 值 |
---|---|
最低受支持的客户端 |
Windows 2000 Professional [仅限桌面应用] |
最低受支持的服务器 |
Windows 2000 Server [仅限桌面应用] |
标头 |
|
库 |
|
DLL |
|