Как я могу нарисовать один треугольник из буфера Vertex Object и установить его цвет? - PullRequest
1 голос
/ 01 декабря 2011

Я создал объект буфера вершин, содержащий только вершины для треугольников, для рисования с опцией GL_TRIANGLES. У моего VBO нет информации о цвете, потому что я меняю цвет каждый кадр.

Теперь я пытаюсь нарисовать отдельные треугольники в цикле после установки цвета вершины по умолчанию, как это на каждой итерации:

glColor4f(red, green, blue, 1);

Но я не уверен, как выполнить настоящий рисунок.

Должен ли я использовать glDrawArrays, если я хочу выбрать один или два треугольника из VBO, чтобы нарисовать их определенным цветом, или я должен использовать glDrawElements?

Есть ли более эффективный способ установить цвет для каждого треугольника в VBO и затем нарисовать его? Или нормально вызывать glColor44 и glDrawArrays в цикле для каждого кадра?

1 Ответ

3 голосов
/ 01 декабря 2011

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

Сказал, что вы, конечно, можете нарисовать отдельные треугольники с помощью glDrawArrays, для этого и нужны параметры first и count. Поэтому, если у вас есть VBO, содержащее 9 вершин из 3 треугольников, просто наберите

glDrawArrays(GL_TRIANGLES, 3, 3);

чтобы нарисовать только 2-й треугольник. Это просто. Также вы можете использовать count и offset параметры glDrawElements, чтобы выбрать конкретную часть массива индекса для рисования.

...