9

我有一个顶点表示三角形条带的数组。我需要将其转换为多边形。有很多解决方案可以做相反的事情,但我没有找到解决上述问题的方法。或者它可能太容易了,我只是看不到它。请帮忙。

OpenGL=兼容,见 http://en.wikipedia.org/wiki/Triangle_strip

示例:对于这个地带http://en.wikipedia.org/wiki/File:Triangle_Strip_Small.png 我需要输出 ABDFEC 或 ACEFDB

4

3 回答 3

6

我相信以下应该有效:

遍历顶点列表。将第一个点添加到多边形。将第二个点压入堆栈。将第三个点添加到多边形。继续在堆栈上的推入点之间交替并将它们添加到多边形,直到到达列表的末尾。当您到达列表的末尾时,弹出堆栈的点并将它们添加到多边形中。

于 2010-08-20T14:47:52.537 回答
1

替代文字

我会假设你的三角形条总是以相同的方式连接(我相信这对于 OpenGL 是正确的)。

  • “底部”顶点总是分开两个:A,C,E,...
  • “顶部”顶点总是分开两个:B,D,F,...

取“底部”列表并附加“顶部”列表的反面。(以 ACEFDB 为例)


或者,更直接地,使用从零开始的索引而不是字母:

// do "bottom"
for ( i = 0; i < N; i += 2 )
  addVertex( i )

// do "top"
largestOddNumberLessThanN = N % 2 == 0 ? N - 1 : N - 2;
for ( i = largestOddNumberLessThanN; i >= 0; i -= 2 )
  addVertex( i )
于 2010-08-20T15:00:30.603 回答
0

如果您的形状具有特别简单的结构,可能会有一条捷径,但总的来说,我认为您想要执行以下操作

  • 从三角形列表中创建一个顶点和边列表。这涉及检测共享点(希望它们是完全匹配的,因此您可以通过散列而不需要某种模糊搜索来找到它们)和共享线(这很容易——只是不要在同一对共享顶点之间绘制两条边) .
  • 找到最左上角的点。
  • 找到尽可能左上角且逆时针方向行进的边。
  • 走到下一个顶点。
  • 找到尽可能多地翻倍于前一条的下一条边。
  • 继续前进,直到再次到达最左上角。
于 2010-08-20T14:23:28.137 回答