Tessellating 多边形
OpenGL 只能直接显示简单的凸多边形。 如果:
- 边缘仅在顶点相交。
- 没有重复的顶点。
- 正好两个边缘在任何顶点相遇。
若要显示简单的非convex 多边形或包含孔的简单多边形,必须先对多边形进行三角化, (将它们细分为凸多边形) 。 此类细分称为 分割。 GLU 提供执行分割的函数集合。 请注意,GLU 分割函数无法处理非简单多边形;没有用于处理此类多边形的标准 OpenGL 方法。
由于通常需要分割并且可能相当棘手,本部分详细介绍了 GLU 细化函数。 这些函数采用输入任意简单的多边形,这些多边形可能包含孔,并返回三角形、三角形网格和三角形风扇的一些组合。 如果不想处理网格或风扇,可以指定分割函数仅返回三角形。 但是,网格和风扇信息可提高性能。 多边形细化函数三角化一个具有一个或多个轮廓的圆锥多边形。
使用多边形分割
使用 gluNewTess 创建分割对象。
使用 gluTessCallBack 定义回调函数,用于处理由细化器生成的三角形。
使用 gluBeginPolygon、 gluTessVertex、 gluNextContour 和 gluEndPolygon,指定带有孔或要分割的凹凸多边形的多边形。
多边形说明完成后,分割设施会根据需要调用回调函数。
可以使用 gluDeleteTess 销毁不需要的分割对象。
有关保存分割数据的详细信息,请参阅 使用回调函数。