Рисуйте разные объекты с разными текстурами на одном и том же VBO OpenGL

Я работаю с OpenGL и в своей программе рисую различные геометрические фигуры (квадраты, треугольники и т. Д.) Для каждого объекта с различными текстурами.

Я протестировал выполнение рендеринга с VBO и шейдерами, и это хорошо работало, создавая VBO для каждого объекта. Проблема возникает, когда большое количество объектов (между 150 и 200) … это означает, что очень много вызовов функции glDrawElements():

glDrawElements (GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);

Я обнаружил, что лучший способ — создать один VBO, содержащий все вершины для рисования (вершины, координаты текстуры, индексы и т. Д.).

Проблема в том, что я не могу использовать разные текстуры для каждого из объектов, так как VBO рисует всю геометрию один раз.

Вопрос в том, как лучше всего (наиболее оптимально) выполнить то, что мне нужно? без использования функций или методов, которые уже устарели как glBegin () / glEnd () или же glDrawArrays () (Я работаю с открытым GL 3.0 и выше).

PD: я использую OpenGL с C ++.

3

Решение

Если вы хотите визуализировать VBO сначала с одной текстурой, а затем с другой:

  1. Привязать первую текстуру
  2. Визуализировать VBO
  3. Привязать вторую текстуру
  4. Рендеринг VBO снова

Если вы хотите нарисовать часть VBO с одной текстурой и часть с другой текстурой, у вас есть несколько вариантов:

  • Разделите ваш VBO на два отдельных VBO и визуализируйте их отдельно,
  • Объедините обе текстуры в одну большую текстуру и соответственно отрегулируйте координаты текстуры, или
  • Используйте текстуры массива и выберите правильный слой в вашем шейдере. Если это поддерживается вашим целевым оборудованием, это, вероятно, ваш лучший вариант. Для большей гибкости рассмотрим редкий текстурные массивы.
4

Другие решения

использовать плиточные текстуры

смысл в одном изображении текстуры У вас есть текстуры для большего количества объектов. Иногда это также называется Текстурный атлас. Так что измените текстурные координаты соответственно.

Если вы используете текстуры 4х4 в одном изображении, вы можете иметь 16 различных объектов в одном изображении. ВБО. Конечно, вы ограничены максимальным размером текстурного изображения и качеством текстур, которые вы хотите использовать.

3D текстуры и массивы текстур

По мере развития gfx HW теперь доступны также 3D текстуры и массивы текстур, поэтому вы можете иметь один фрагмент текстуры на объект сейчас … без необходимости переключаться между текстурами …

2

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector