三角带三角剖分

Posted

技术标签:

【中文标题】三角带三角剖分【英文标题】:Triangle strip triangulation 【发布时间】:2013-12-31 18:04:17 【问题描述】:

我想将三角形​​带的顶点转换为独立的三角形,这样我就可以使用 OpenGL 的 GL_TRIANGLES 原始类型来绘制它们。

但是,以下两个代码都不起作用,我不明白为什么:

for(int i = 0; i < triangleStripVertices.size() - 2; i++) 
    triangleVertices.add(triangleStripVertices.get(i));
    triangleVertices.add(triangleStripVertices.get(i + 1));
    triangleVertices.add(triangleStripVertices.get(i + 2));

这个也不行:

for(int i = 0; i < triangleStripVertices.size() - 2; i++) 
    if(i % 2 == 1) 
        triangleVertices.add(triangleStripVertices.get(i));
        triangleVertices.add(triangleStripVertices.get(i + 2));
        triangleVertices.add(triangleStripVertices.get(i + 1));         
     else 
        triangleVertices.add(triangleStripVertices.get(i));
        triangleVertices.add(triangleStripVertices.get(i + 1));
        triangleVertices.add(triangleStripVertices.get(i + 2));
    

我在这里做错了什么?

损坏的输出看起来像:

【问题讨论】:

我希望第二段代码应该可以工作。问题是什么?你考虑过正面是逆时针还是顺时针? 另外,可能与***.com/questions/3485034/…重复 感谢您的回答。我正在关注本教程:github.com/mattdesl/lwjgl-basics/wiki/LibGDX-Finger-Swipe 但我的三角条有一个奇怪的行为。第一个点也与最后一个点相连,因此它不是预期的条带。这可能是什么原因? 那么,除了将条带解释为三角形之外,您可能还会遇到其他问题。为什么不直接画三角带,看看结果如何?然后,您可以检查您的输入三角带是否正确。此外,为简化起见,您可以减小三角形带的大小,并通过将其绘制为三角形列表来查看会发生什么。 我第一次尝试用三角条来做,但它没有用...这是我的三角条出现问题的图片:dec.imghost.us/y4oR.png 有什么想法吗?我快疯了……谢谢! 【参考方案1】:

您的尝试已经很接近了,但是您缺少一点。三角形条具有“最旧顶点”的概念,即处理三角形后将被删除的顶点。由于需要保持带中三角形的面度(有时称为顶点缠绕)相同,因此最旧的顶点不是列表中的下一个顶点;它在列表中最旧和第二旧之间切换。

例如,假设您有一个顶点索引列表

GLuint indices =  0, 1, 2, 3, 4, 5 ;

然后您使用该列表致电glDrawElements()。将使用上述列表中的顶点索引渲染以下三角形:(0, 1, 2), (2, 1, 3), (2, 3, 4), (4, 3, 5)。

因此,要将三角形条展开成一组三角形,您需要考虑到这一点。这是一个可以做你想做的事情的 sn-p:

for (int i = 0; i < triangleStripVertices.size() - 2; i++) 
    if (i % 2) 
        triangleVertices.add(triangleStripVertices.get(i + 1));
        triangleVertices.add(triangleStripVertices.get(i));
        triangleVertices.add(triangleStripVertices.get(i + 2));         
     
    else 
        triangleVertices.add(triangleStripVertices.get(i));
        triangleVertices.add(triangleStripVertices.get(i + 1));
        triangleVertices.add(triangleStripVertices.get(i + 2));
    

【讨论】:

以上是关于三角带三角剖分的主要内容,如果未能解决你的问题,请参考以下文章

如何对内部有和没有顶点和孔的多边形进行三角剖分 - 可以进行德劳内三角剖分吗?

k路三角形集交点和三角剖分

网格二维三角剖分

谁对opencv里面的delaunay三角剖分方法比较熟悉的

计算几何——三角剖分 uva1331+poj3675

UVa 1331 最大面积最小的三角剖分