三角带三角剖分

km

我想将三角形​​带的顶点转换为独立的三角形,以便可以使用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));
    }
}

我在这里做错了什么?

损坏的输出如下所示:

坏的输出

部首7

您的尝试非常接近,但有一点缺少。三角带具有“最旧顶点”的概念,一旦处理了三角形,该顶点即被删除。由于需要使条带中的三角形的表面(有时称为“顶点缠绕”保持相同,因此最早的顶点不是列表中的下一个顶点;它会在列表中最老的和第二个最老的触发器之间翻转。

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

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

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

因此,要将三角带展开为一组三角形,您需要考虑到这一点。这是一个可以满足您需求的代码段:

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));
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章