перкулярно 1 VBO на 1 многоугольник
Вау. 1 VBO на полигон не будет эффективным. Убивает всю причину для буфера вершин. Идея буфера вершин состоит в том, чтобы втиснуть в него как можно больше вершин. Вы можете поместить несколько полос треугольников в один буфер вершин или визуализировать отдельные примитивы, которые хранятся в одном буфере.
Мне нужен способ изменить приведенный выше код, чтобы вместо этого он выглядел примерно так:
Это должно работать:
glBegin(GL_TRIANGLES);
for (v= 0; v < tri.strip[s].num_vertices-2; v++)
if (v & 1){
glVertex2d(tri.strip[s].vertex[v].x, tri.strip[s].vertex[v].y);
glVertex2d(tri.strip[s].vertex[v+1].x, tri.strip[s].vertex[v+1].y);
glVertex2d(tri.strip[s].vertex[v+2].x, tri.strip[s].vertex[v+2].y);
}
else{
glVertex2d(tri.strip[s].vertex[v].x, tri.strip[s].vertex[v].y);
glVertex2d(tri.strip[s].vertex[v+2].x, tri.strip[s].vertex[v+2].y);
glVertex2d(tri.strip[s].vertex[v+1].x, tri.strip[s].vertex[v+1].y);
}
glEnd();
Поскольку триангуляция треугольных полос идет следующим образом (числа представляют индексы вершин):
0----2
| /|
| / |
| / |
|/ |
1----3
Примечание: я предполагаю, что вершины в треугольных полосках хранятся в том же порядке, что и на моей картинке И что вы хотите, чтобы вершины треугольников отправлялись против часовой стрелки. Если вы хотите, чтобы они были CW, используйте другой код:
glBegin(GL_TRIANGLES);
for (v= 0; v < tri.strip[s].num_vertices-2; v++)
if (v & 1){
glVertex2d(tri.strip[s].vertex[v].x, tri.strip[s].vertex[v].y);
glVertex2d(tri.strip[s].vertex[v+2].x, tri.strip[s].vertex[v+2].y);
glVertex2d(tri.strip[s].vertex[v+1].x, tri.strip[s].vertex[v+1].y);
}
else{
glVertex2d(tri.strip[s].vertex[v].x, tri.strip[s].vertex[v].y);
glVertex2d(tri.strip[s].vertex[v+1].x, tri.strip[s].vertex[v+1].y);
glVertex2d(tri.strip[s].vertex[v+2].x, tri.strip[s].vertex[v+2].y);
}
glEnd();