Я работаю с 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 ++.
Если вы хотите визуализировать VBO сначала с одной текстурой, а затем с другой:
Если вы хотите нарисовать часть VBO с одной текстурой и часть с другой текстурой, у вас есть несколько вариантов:
использовать плиточные текстуры
смысл в одном изображении текстуры У вас есть текстуры для большего количества объектов. Иногда это также называется Текстурный атлас. Так что измените текстурные координаты соответственно.
Если вы используете текстуры 4х4 в одном изображении, вы можете иметь 16 различных объектов в одном изображении. ВБО. Конечно, вы ограничены максимальным размером текстурного изображения и качеством текстур, которые вы хотите использовать.
3D текстуры и массивы текстур
По мере развития gfx HW теперь доступны также 3D текстуры и массивы текстур, поэтому вы можете иметь один фрагмент текстуры на объект сейчас … без необходимости переключаться между текстурами …