指定回调

最多可为分割指定五个回调函数。 凡未指定的所有函数均不会在分割期间调用,且无法获取这些函数可能返回的任何信息。 应使用 gluTessCallback 指定回调函数。

gluTessCallback 函数可将回调函数 fn 与分割对象 tessobj 相关联。 此回调的类型由参数 type 确定,而该参数可为 GLU_BEGINGLU_EDGE_FLAGGLU_VERTEXGLU_ENDGLU_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 函数 glBeginglEdgeFlagglVertexglEnd 的方式。

可使用三个可能的函数之一来调用 GLU_BEGIN 回调函数:

  • GL_TRIANGLE_FAN
  • GL_TRIANGLE_STRIP
  • GL_TRIANGLES

调用 GLU_BEGIN 回调函数后,在调用与 GLU_END 关联的回调函数之前,系统将调用 GLU_EDGE_FLAGGLU_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 函数来获取用于描述此错误的字符串。