我有一个包含顶点的三角形条纹数组。
我需要将其转换为多边形。
有许多方法可以做相反的操作,但我找不到解决上述问题的方法。
或者这可能太简单了,我只是看不见。
请帮忙。
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。
我相信以下方法应该有效:
遍历顶点列表。将第一个点添加到多边形中。将第二个点推入堆栈。将第三个点添加到多边形中。继续在将点推入堆栈和将它们添加到多边形之间交替,直到到达列表末尾。当到达列表末尾时,弹出堆栈中的点并将它们添加到多边形中。
我会假设你的三角形带总是以相同的方式连接(我相信这对于OpenGL是正确的)。
取“底部”列表并附加“顶部”列表的反向。(例如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 )
如果你的形状结构特别简单,可能会有一个快捷方式,但一般来说我认为您想要执行以下操作: