OpenGL: оптимизация рендеринга квадрупольных частиц - PullRequest
0 голосов
/ 27 января 2011

Я рендеринг частиц в 2D-игре. Каждая частица - это квад (2 треугольника). Как сделать рисунок максимально быстрым? Все частицы имеют одинаковую текстуру, я только меняю их положение.

Теперь я использую вызовы glVertexPointer и glDrawArrays для каждой частицы. Поэтому я каждый раз отправляю 4 вершины в графический процессор.

Есть ли другой подход, который мог бы быть быстрее?

Я использую OpenGL ES 1.1 (iPhone)

Спасибо!

Ответы [ 2 ]

3 голосов
/ 27 января 2011

Каждый ваш вызов (glDrawArrays) дорогой. Делать это один раз за частицу, безусловно, слишком часто. Все ваши частицы могут быть извлечены с помощью одного вызова; просто установите большой массив всех вершин треугольника и другой большой массив с координатами текстуры, и один раз вызовите glVertexPointer / glDrawArrays - это сила glVertexPointer: произвольная геометрия того же типа за один вызов. :)

Для того, что вы делаете, вы также должны посмотреть на точечные спрайты (GL_POINTS), которые также функционируют как крошечные текстурированные квадраты. Они только 2D, поэтому вы не можете отобразить вашу текстуру по оси Z, но если ваши частицы - это просто 2D квады одной и той же текстуры снова и снова, точечные спрайты, вероятно, будут делать именно то, что вы хотите.

0 голосов
/ 27 января 2011

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

РЕДАКТИРОВАТЬ: После просмотра немного, кажется, что вам нужно два между;по существу, один после и один до.Он добавляет довольно много дополнительных вершин, но по своему опыту я знаю, что для iPhone это ОГРОМНО положительно влияет на то, чтобы сделать все это за одну операцию рисования (мы рисовали текст из текстуры, так что по сути это одно и то же).

EDIT2: Также обратите внимание, я имею в виду использование GL_TRIANGLE_STRIP - если бы вы использовали вместо этого GL_TRIANGLES, вам не понадобились бы дополнительные вершины ... за исключением того, что вы все равно будете делать то же количество дополнительно, из-за повторения 2 для каждого второго треугольника.

...