В моем приложении я рисую много кубов через OpenGL ES Api. Все кубы имеют одинаковые размеры, только они расположены в разных координатах в пространстве. Я могу придумать два способа их рисования, но я не уверен, какой из них наиболее эффективен. Я не эксперт по OpenGL, поэтому я решил спросить здесь.
Метод 1, который я сейчас использую: так как все кубы имеют одинаковые размеры, я вычисляю буфер вершин, индексный буфер, нормальный буфер и буфер цвета только один раз. Во время обновления сцены я перебираю все кубы, выполняю bufferData () для того же набора буферов, а затем рисую треугольную сетку куба с помощью вызова drawElements (). Так как каждый куб находится в разной позиции, я перевожу mvMatrix перед рисованием. bufferData () и drawElements () выполняются для каждого куба. В этом методе я, вероятно, экономлю много памяти, не вычисляя буферы каждый раз. Но я делаю много вызовов drawElements ().
Метод 2: обрабатывать все кубы как набор многоугольников, разбросанных по всей сцене. Вычислить вершины, индекс, цвет, нормальные буферы для каждого многоугольника (фактически, треугольники внутри многоугольников) и поместить их в память видеокарты за один вызов метода bufferData (). Затем нарисуйте их одним вызовом drawElements (). Преимущество этого подхода заключается в том, что я делаю только один вызов bindBuffer и drawElements. Недостатком является то, что я использую много памяти для создания буферов.
Мой опыт работы с OpenGL достаточно ограничен, чтобы не знать, какой из вышеперечисленных методов лучше с точки зрения производительности.
Я использую это в приложении WebGL, но это общий вопрос OpenGL ES.