C# 将形状转换为多边形

C# 将形状转换为多边形,c#,opengl,polygon,shape,C#,Opengl,Polygon,Shape,有没有任何简单(或没有)的算法能够从闭合路径创建多边形 假设w有以下路径: 0,0; 2,0, 2,1; 1,1; 1,2; 2,2; 2,3; 0,3; 我需要能够为OpenGL顶点缓冲区创建多边形索引。我使用的语言是C 有人建议我使用凸面外壳,但这不是我要找的东西,因为我已经有了一个形状。我知道这可能是一个微不足道的问题,但说真的,我找不到任何描述或东西来指出mi的正确方向 编辑: 答案1建议选择一个点,并将其连接到其他未连接的点,这适用于答案形状中显示的形状,但不适用于我发布的形状,上面

有没有任何简单(或没有)的算法能够从闭合路径创建多边形

假设w有以下路径:

0,0; 2,0, 2,1; 1,1;
1,2; 2,2; 2,3; 0,3;
我需要能够为OpenGL顶点缓冲区创建多边形索引。我使用的语言是C

有人建议我使用凸面外壳,但这不是我要找的东西,因为我已经有了一个形状。我知道这可能是一个微不足道的问题,但说真的,我找不到任何描述或东西来指出mi的正确方向

编辑:

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


转换为三角形是容易的还是困难的,这取决于您的需求以及您想做得多好

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

0, 1, 2,   0, 2, 3,  0, 3, 4, ...
它将如下所示:

凹面的情况是更多的工作。同样适用于凹多边形(不是有洞的多边形!)的算法是耳朵裁剪法,如所述(该页有更多内容)

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


至于法线,如果多边形是平面的(最有可能是“应该”),则取两条非共入射边并对其进行叉积(有两条法线,您可能只需要一条:您需要选择叉积的顺序(顺时针或逆时针)基于.

您想三角化此多边形?还是打算使用
GL\u多边形
?我在函数
GL抽屉元素
中使用
GL\u三角形
来渲染顶点缓冲区,因此我需要顶点(如上)、索引(我需要建立具有形状的索引)和法线(目前不需要)。我提出了这种方法,但它不适用于所有形状,至少不适用于我的项目所需的形状。我更新了我的问题以澄清问题。是的,正如我所说的,扇出方法不适用于凹多边形。(通常情况下也很糟糕)我提到了一种(耳朵剪辑,有一个链接-它还提到了一些其他方法)如果你想要更多的算法,你应该在谷歌上搜索“多边形三角剖分”,因为有许多算法有不同的折衷。伙计,你太棒了。搜索耳朵剪辑(我错过了名字:P)我遇到了