指定要细化多边形

指定一个多边形 (可能包含要细化) 的孔,

对于没有孔的多边形,规范过程与 OpenGL 中完全相同:

  1. gluBeginPolygon 开始。
  2. 为边界中的每个顶点调用 gluTessVertex
  3. 通过调用 gluEndPolygon 结束多边形。

如果多边形由多个轮廓(包括孔和孔内的孔)组成,则可以逐个指定轮廓,每个轮廓前面由 gluNextContour 指定。 调用 gluEndPolygon 时,它会向最终轮廓的末尾发出信号,并开始细化。 可以在第一个轮廓之前省略 对 gluNextContour 的调用。 gluBeginPolygon 函数开始规范要分割的多边形,并将细化对象 tessobj 与其相关联。 要使用的回调函数是使用 gluTessCallback 绑定到细化对象的回调函数。

gluTessVertex 函数指定要细化多边形中的顶点。 为多边形中的每个顶点调用 gluTessVertex 。 函数的 tessobj 参数是要使用的细化对象, v 包含三维顶点坐标, 数据 是发送到与 GLU_VERTEX关联的回调的任意指针。 通常, 数据 包含顶点数据、纹理坐标、颜色信息或应用程序可能需要的任何其他内容。

当多个轮廓构成要细化多边形的边界时, gluNextContour 函数将标记下一个轮廓线的开头。 函数 的类型 参数可以是 GLU_EXTERIORGLU_INTERIORGLU_CCWGLU_CWGLU_UNKNOWN。 这些常量仅用作细化提示。 如果正确,分割可能会更快。 如果弄错了它们,它们将被忽略,分割仍然有效。

对于带孔的多边形,一个轮廓是外部轮廓,另一个是内部轮廓。 如果不在 gluBeginPolygon 之后立即调用 gluNextContour,则假定第一个轮廓的类型为 GLU_EXTERIOR

GLU_CWGLU_CCW 指示顺时针和逆时针方向的多边形。 选择哪些是顺时针的,哪些是逆时针的,在三维中是任意的,但在任何平面中,有两个不同的方向:一致地使用 GLU_CWGLU_CCW 类型。 如果不知道要使用哪个,请使用 GLU_UNKNOWN

gluEndPolygon 函数指示多边形规范的结尾。 它还指示分割可以使用细化对象 tessobj 开始。