Управление OpenGL VBO и цветом

Я создаю приложение, которое использует VBO для рисования. Приложение рисует сегменты линий нескольких цветов. Поэтому я создаю массив вершин и индексов для каждого цвета и сортирую сегменты в соответствующий массив по цвету.

Однако я хотел бы, чтобы пользователь мог установить цвет любого сегмента линии. Таким образом, мое потенциальное количество цветов практически не ограничено (очевидно, что не совсем, но вполне может быть). Я предполагаю, что генерация, скажем, 2000 VBO для хранения 1000 массивов вершин и индексов для поддержки 1000 цветов не будет хорошей идеей.

Очевидно, что можно сгенерировать ограниченное количество VBO и копировать новые данные каждый раз, когда пришло время рисовать массив вершин нового цвета, но это кажется невероятно неэффективным.

Любые предложения по урегулированию этой ситуации?


person wadesworld    schedule 21.11.2009    source источник


Ответы (1)


Ну, учитывая, что вы не говорите, что именно находится в vbo (позиция? цвет?) или как вы в конечном итоге рисуете (фиксированная функция? программа?), это не совсем тривиально, чтобы помочь.

В любом случае, вот некоторые факты, которые вы хотите иметь в виду:

  • вам не нужно создавать много vbos. VBO (так же, как IBO) предназначен для хранения, он может хранить произвольное количество наборов данных. Этому помогают параметры «firstIndex/firstVertex» различных функций Draw и другие смещения gl*Pointer.
  • ваш цвет не должен быть указан для каждой вершины. Если вы храните его внутри VBO, извлеките его и используйте постоянные цвета (как это сделать, зависит от вашего метода рисования. Для программ укажите цвет через униформу, а не атрибут)

Вот, я надеюсь, что этого достаточно для вас, чтобы начать.

person Bahbar    schedule 21.11.2009
comment
В настоящее время VBO — это просто данные вершин и индексов. Но я понимаю, что вы говорите об использовании нескольких и хранении данных о цвете внутри. - person wadesworld; 21.11.2009
comment
гул, цвет может быть вершинными данными. Не путайте данные вершин и данные положения (если вы это имели в виду). и моя цель состоит в том, чтобы получить цвет из VBO. - person Bahbar; 21.11.2009
comment
Упс, забыл ответить на вопрос как — рисование выполняется через glDrawElements. - person wadesworld; 21.11.2009
comment
мой вопрос о том, как был больше о шейдере или не шейдере. В этих двух случаях мир сильно отличается. - person Bahbar; 21.11.2009