三角带三角剖分
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));
【讨论】:
以上是关于三角带三角剖分的主要内容,如果未能解决你的问题,请参考以下文章
如何对内部有和没有顶点和孔的多边形进行三角剖分 - 可以进行德劳内三角剖分吗?