Прежде всего, я бы предпочел проигнорировать немного более высокую стоимость памяти и просто сохранить цвет с каждой вершиной внутри VBO и, следовательно, просто дублировать цвет треугольника для каждой из вершин треугольника (вы не можете установить цвета для каждого треугольника). ). Скорее всего, это будет намного эффективнее, чем рисование отдельных треугольников в цикле. Имейте в виду, что преимуществом VBO является не только их возможное хранение в графическом процессоре, но и тот факт, что вам не нужны вызовы драйверов для каждого треугольника или даже вершины. Так что просто скопируйте цвета для каждого треугольника в цвета для каждой вершины и нарисуйте все одним вызовом glDrawArrays
(glDrawElements
не будет вам дорого, если вам все равно придется дублировать почти каждую вершину, что делает индексы просто бесполезными) .
Сказал, что вы, конечно, можете нарисовать отдельные треугольники с помощью glDrawArrays
, для этого и нужны параметры first
и count
. Поэтому, если у вас есть VBO, содержащее 9 вершин из 3 треугольников, просто наберите
glDrawArrays(GL_TRIANGLES, 3, 3);
чтобы нарисовать только 2-й треугольник. Это просто. Также вы можете использовать count
и offset
параметры glDrawElements
, чтобы выбрать конкретную часть массива индекса для рисования.