Я построил 2D-графический движок и создал для него пакетную систему, поэтому, если у меня есть 1000 спрайтов с одинаковой текстурой, я могу нарисовать их одним вызовом openGl.
Это достигается помещением в один массив вершин vbo всех вершин всех спрайтов с одинаковой текстурой.
Вместо «распечатать эти вершины, распечатать эти вершины, распечатать эти вершины», я делаю «сложить все вершины вместе, напечатать», просто для большей ясности. Достаточно просто, но теперь я пытаюсь добиться того же в 3D, и у меня большая проблема.
Проблема в том, что я использую матрицу проекции вида модели для размещения и визуализации своих моделей, что является обычным подходом для визуализации модели в трехмерном пространстве.
Для каждой модели на экране мне нужно передать матрицу MVP шейдеру, чтобы я мог использовать ее для преобразования каждой вершины в правильное положение.
Если бы я выполнял преобразование за пределами шейдера, он бы выполнялся процессором, что я не считаю хорошей идеей по очевидным причинам.
Но проблема в этом. Мне нужно передать матрицу шейдеру, но для каждой модели матрица разная.
Поэтому я не могу сделать то же самое, что и с 2-мерными спрайтами, потому что изменение формы шейдера требует отрисовки каждый раз.
Надеюсь, я был ясен, может быть, у вас есть хорошая идея, которой у меня не было, или у вас уже была такая же проблема. Я точно знаю, что где-то есть решение, потому что в движке, таком как Unity, вы можете использовать один и тот же шейдер для нескольких моделей и уйти с одного вызова отрисовки