指定回调
最多可为分割指定五个回调函数。 凡未指定的所有函数均不会在分割期间调用,且无法获取这些函数可能返回的任何信息。 应使用 gluTessCallback 指定回调函数。
gluTessCallback 函数可将回调函数 fn 与分割对象 tessobj 相关联。 此回调的类型由参数 type 确定,而该参数可为 GLU_BEGIN、GLU_EDGE_FLAG、GLU_VERTEX、GLU_END 或 GLU_ERROR。 这五个潜在的回调函数具有以下原型。
回调函数 | 原型 |
---|---|
GLU_BEGIN | void begin(GLenumtype ); |
GLU_EDGE_FLAG | void edgeFlag(GLbooleanflag ); |
GLU_VERTEX | void vertex(**void ***data ); |
GLU_END | void end( void ); |
GLU_ERROR | void error(GLenumerrno ); |
若要更改回调函数,请使用新函数来调用 gluTessCallback。 若要消除回调函数而不将其替换为新函数,请为相应函数向 gluTessCallback 传递一个 null 指针。
随着分割的进行,回调函数的调用方式类似于使用 OpenGL 函数 glBegin、glEdgeFlag、glVertex 和 glEnd 的方式。
可使用三个可能的函数之一来调用 GLU_BEGIN 回调函数:
- GL_TRIANGLE_FAN
- GL_TRIANGLE_STRIP
- GL_TRIANGLES
调用 GLU_BEGIN 回调函数后,在调用与 GLU_END 关联的回调函数之前,系统将调用 GLU_EDGE_FLAG 和 GLU_VERTEX 回调的某些组合。 对关联的顶点和边缘标志的解释与它们在 OpenGL 中的 glBegin(GL_TRIANGLE_FAN)、glBegin(GL_TRIANGLE_STRIP) 或 glBegin(GL_TRIANGLES**)** 与匹配 glEnd 之间的解释完全相同。
由于边缘标志在三角形扇或三角形条中没有意义,因此如果存在与 GLU_EDGE_FLAG 关联的回调函数,则只能使用 GL_TRIANGLES 来调用 GLU_BEGIN 回调。 GLU_EDGE_FLAG 回调函数的工作方式类似于 OpenGL glEdgeFlag 函数。
如果在分割期间出现错误,则会调用错误回调函数。 系统会向错误回调函数传递一个 GLU 错误号。 可使用 gluErrorString 函数来获取用于描述此错误的字符串。