【问题标题】:Convert shape to polygons将形状转换为多边形
【发布时间】:2013-03-18 18:06:59
【问题描述】:

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

假设 w 有以下路径:

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

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

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

编辑:

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

【问题讨论】:

  • 您想对这个多边形进行三角测量?还是打算使用GL_POLYGON
  • 我在函数glDrawElements 中使用GL_TRIANGLES 来渲染顶点缓冲区,所以我需要顶点(上图)、索引(我需​​要建立形状)和法线(目前不需要)。

标签: c# opengl polygon shape


【解决方案1】:

转换为三角形是容易还是难,这取决于您的要求以及您想要做到的程度。

如果你的多边形是凸的,最简单的方法是使用GL_TRIANGLES 和索引

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

看起来像这样:

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

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

至于法线,如果您的多边形是平面的(很可能“应该”是),则取两条不重合的边并将它们交叉乘积(有两条法线,您可能只需要一条:您需要选择根据right hand rule 交叉乘积的顺序(顺时针或逆时针)。

【讨论】:

  • 我想出了这种方法,但它并不适用于所有情况,至少不适用于我的项目所需的形状。我更新了我的问题以说明问题。
  • 是的,正如我所说,扇出方法不适用于凹多边形。 (总的来说,这也很糟糕)我提到了一个解决方案(剪耳,有一个链接 - 它还提到了一些其他方法),如果你想要更多算法,你应该在谷歌搜索“多边形三角测量”,因为那里他们中的许多人都有不同的权衡。
  • 伙计,你太棒了。搜索耳夹(我错过了名字:P)我遇到了this
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-23
  • 1970-01-01
  • 1970-01-01
  • 2022-01-05
  • 2012-08-30
相关资源
最近更新 更多