Эффективный способ рисования в OpenGL ES

В моем приложении я рисую множество кубов через OpenGL ES Api. Все кубики имеют одинаковые размеры, только они расположены в разных координатах в пространстве. Я могу придумать два способа их нарисовать, но не уверен, какой из них наиболее эффективен. Я не эксперт по OpenGL, поэтому решил спросить здесь.

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

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

Мой опыт работы с OpenGL достаточно ограничен, чтобы не знать, какой из вышеперечисленных методов лучше с точки зрения производительности.

Я использую его в приложении WebGL, но это общий вопрос OpenGL ES.

11
задан Jayesh 13 October 2010 в 13:37
поделиться