我想将三角形条带的顶点转换为独立的三角形,以便我可以使用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));
}
}
我在这里做错了什么?
损坏的输出如下:
答案 0 :(得分:4)
你的尝试非常接近,但有一点你错过了。三角形条带具有“最旧顶点”的概念,这是在处理三角形后被移除的概念。由于需要在条带中保持三角形的面对面(有时称为顶点缠绕),所以最旧的顶点不是列表中的下一个顶点;它在列表中最旧和第二个最老的之间翻转。
例如,假设您有一个顶点索引列表
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));
}
}