是否有任何简单(或不是)算法能够从封闭路径创建多边形?
假设w有以下路径:
0,0; 2,0, 2,1; 1,1;
1,2; 2,2; 2,3; 0,3;
我需要能够为OpenGL顶点缓冲区创建多边形索引。我正在使用的语言是C#。
有人向我提出了Convex Hull,但这不是我想要的东西,因为我已经有了一个形状。我知道这可能是一个微不足道的问题,但严重的是,我找不到任何描述或某些东西指向正确的方向。
编辑:
答案1建议选择一个点并将其连接到其他未连接的点,这适用于呈现回答形状,但它不适用于我发布的形状,上面的形状如下所示:
答案 0 :(得分:2)
转换为三角形既简单又困难,具体取决于您的要求以及您想要的效果。
如果您的多边形是凸的,最简单的方法是使用带有标记的GL_TRIANGLES
0, 1, 2, 0, 2, 3, 0, 3, 4, ...
看起来像这样:
凹陷的情况更多。一种也适用于凹面多边形(不是带有孔!)的算法是Ear-clipping方法,在wikipedia上有描述(该页面上还有更多内容。)
当你想要一个“好”的三角测量时,事情会变得非常有趣:避免使用瘦三角形或小三角形,减少三角形等数量,然后你就可以换取质量来获得速度。我不会在这里讨论任何高级算法;在Google上搜索多边形三角剖分将为您提供大量信息。
对于法线,如果你的多边形是平面的(很可能是“应该”),那么就取两个非共同边缘并交叉产生它们(有两个法线,你可能只想要一个:你需要选择您根据right hand rule交叉产品的顺序(顺时针或逆时针)。