指定回调

最多可以为细化指定五个回调函数。 未指定的任何函数都不会在细化期间调用,并且你不会获取它们可能已返回的任何信息。 使用 gluTessCallback 指定回调函数。

gluTessCallback 函数将回调函数 fn 与细化对象 tessobj 相关联。 回调的类型由参数类型决定,参数 类型可以是 GLU_BEGINGLU_EDGE_FLAGGLU_VERTEXGLU_ENDGLU_ERROR。 五个可能的回调函数具有以下原型。

回调函数 原型
GLU_BEGIN voidbegin (GLenum类型 ) ;
GLU_EDGE_FLAG voidedgeFlag (GLbooleanflag ) ;
GLU_VERTEX void顶点 (**void ***data ) ;
GLU_END voidend ( void ) ;
GLU_ERROR void错误 (GLenumerrno ) ;

 

若要更改回调函数,请使用新函数调用 gluTessCallback 。 若要消除回调函数而不将其替换为新函数,请为相应函数传递 gluTessCallback 一个 null 指针。

随着细化继续进行,回调函数的调用方式类似于使用 OpenGL 函数 glBeginglEdgeFlagglVertexglEnd 的方式。

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

  • GL_TRIANGLE_FAN
  • GL_TRIANGLE_STRIP
  • GL_TRIANGLES

在调用 GLU_BEGIN 回调函数之后,在调用与 GLU_END关联的回调函数之前,将调用 GLU_EDGE_FLAGGLU_VERTEX 回调的某种组合。 关联的顶点和边缘标志在 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 函数获取描述错误的字符串。