将三角形条带的顶点转换为多边形的算法

时间:2010-08-20 14:09:40

标签: algorithm opengl polygon triangulation

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

OpenGL =兼容,请参阅 http://en.wikipedia.org/wiki/Triangle_strip

实施例: 为此条http://en.wikipedia.org/wiki/File:Triangle_Strip_Small.png 我需要输出A B D F E C或A C E F D B

3 个答案:

答案 0 :(得分:6)

我相信以下内容应该有效:

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

答案 1 :(得分:1)

alt text

我假设你的三角形条总是以相同的方式连接(我相信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 )

答案 2 :(得分:0)

如果你的形状结构特别简单,可能会有一个捷径,但总的来说我认为你想要做以下事情

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