细化多边形

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

  • 边缘仅在顶点相交。
  • 没有重复的顶点。
  • 完全两个边缘在任何顶点相遇。

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

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

使用多边形分割

  1. 使用 gluNewTess创建分割对象。

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

  3. gluBeginPolygongluTessVertexgluNextContourgluEndPolygon,请指定具有孔或凹形多边形的多边形进行分割。

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

    可以使用 gluDeleteTess销毁不需要的分割对象。

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