细化多边形

OpenGL 只能直接显示简单的凸多边形。 如果为,则多边形很简单:

  • 边缘仅在顶点相交。
  • 没有重复的顶点。
  • 正好两个边缘在任何顶点相交。

若要显示简单的非凸面或包含孔的简单多边形,必须先对多边形进行三角化 (将它们细分为) 凸多边形。 这种细分称为 分割。 GLU 提供执行分割的函数的集合。 请注意,GLU 细化函数无法处理非简单多边形;没有用于处理此类多边形的标准 OpenGL 方法。

由于细化通常是必需的,并且可能相当棘手,本部分详细介绍了 GLU 细化函数。 这些函数采用可能包含孔的任意简单多边形作为输入,并返回三角形、三角形网格和三角形扇形的某种组合。 如果不想处理网格或风扇,可以指定细化函数仅返回三角形。 但是,网格和风扇信息可以提高性能。 多边形细化函数使用一个或多个轮廓对凹形多边形进行三角化。

使用多边形细化

  1. 使用 gluNewTess 创建细化对象。

  2. 使用 gluTessCallBack 定义将用于处理细化器生成的三角形的回调函数。

  3. 使用 gluBeginPolygongluTessVertexgluNextContourgluEndPolygon,指定要细化带孔的多边形或凹形多边形。

    多边形说明完成后,分割设施会根据需要调用回调函数。

    可以使用 gluDeleteTess 销毁不需要的细化对象。

有关保存细化数据的详细信息,请参阅 使用回调函数