文章目录
因为WebGL只绘制三角形,而三角形总是平面凸多边形
凸多边形,Convex Polygon,指如果把一个多边形的所有边中,任意一条边向两方无限延长成为一直线时,其他各边都在此直线的同旁,那么这个多边形就叫做凸多边形。
所以我们还有一个问题需要解决,即如何处理更一般的多边形?我们可以有以下两种解决方案:
- 要求应用程序确保所生成的多边形都是三角形(逗我)
- 通过软件把给定的一般多边形细分成多个平面凸多边形(一般是三角形)。
把给定的一般多边形细分成多个三角形的方法有很多。这些方法我们称之为细分算法。
一种好的细分算法不会产生细长的三角形。如果可能的话,细分算法生成的一组三角形应该满足良好的几何特性,例如生成的一组三角形是三角形条带或者三角形扇形。
多边形细分算法
下面介绍一种多边形细分算法,该算法可以用于细分一个具有n个顶点的任意简单多边形。,从构建该算法的开始就知道,这个任意简单多边形最终可以被细分成n-2个三角形。
假定通过一个有序的顶点列表来指定该多边形,则该多边形具有从到的边,到的边,直至最后到的边。
算法的步骤
- 通过比较每个顶点的x值,寻找多边形最左边的顶点
- 假定与顶点相邻的两个顶点分别是和。这三个顶点生成一个三角形。
如果三角形是如图8.36所示的情形,那么只要将从初始的顶点列表删除掉,这时得到一个三角形和一个具有n-1个顶点的多边形,之后可以按同样的方法对细分后得到的这个多边形进行迭代处理。
然而,由于被细分的多边形可能是凹多边形,因此从到的线段可能与多边形的其他边相交,如图8.37所示。
判断出现这种情形的方法
测试多边形的其他顶点是否位于该线段的左侧且位于三角形的内部。
解决这种情形的方法
如果与多边形的其他顶点中位于最左边的那个顶点连接起来,那么可以将最初的多边形分割成两个新的多边形。