将形状转换为多边形

时间:2013-03-18 18:06:59

标签: c# opengl polygon shape

是否有任何简单(或不是)算法能够从封闭路径创建多边形?

假设w有以下路径:

0,0; 2,0, 2,1; 1,1;
1,2; 2,2; 2,3; 0,3;

我需要能够为OpenGL顶点缓冲区创建多边形索引。我正在使用的语言是C#。

有人向我提出了Convex Hull,但这不是我想要的东西,因为我已经有了一个形状。我知道这可能是一个微不足道的问题,但严重的是,我找不到任何描述或某些东西指向正确的方向。

编辑:

答案1建议选择一个点并将其连接到其他未连接的点,这适用于呈现回答形状,但它不适用于我发布的形状,上面的形状如下所示:

Shape

1 个答案:

答案 0 :(得分:2)

转换为三角形既简单又困难,具体取决于您的要求以及您想要的效果。

如果您的多边形是凸的,最简单的方法是使用带有标记的GL_TRIANGLES

0, 1, 2,   0, 2, 3,  0, 3, 4, ...

看起来像这样:

triangulation by fanning

凹陷的情况更多。一种也适用于凹面多边形(不是带有孔!)的算法是Ear-clipping方法,在wikipedia上有描述(该页面上还有更多内容。)

当你想要一个“好”的三角测量时,事情会变得非常有趣:避免使用瘦三角形或小三角形,减少三角形等数量,然后你就可以换取质量来获得速度。我不会在这里讨论任何高级算法;在Google上搜索多边形三角剖分将为您提供大量信息。

对于法线,如果你的多边形是平面的(很可能是“应该”),那么就取两个非共同边缘并交叉产生它们(有两个法线,你可能只想要一个:你需要选择您根据right hand rule交叉产品的顺序(顺时针或逆时针)。