В OpenGL ES быстрее нарисовать один большой объект или много маленьких? - PullRequest
3 голосов
/ 27 мая 2011

Для игры OpenGL ES 3-D на iPhone, какая из следующих операций рендерится быстрее:

  • 10 объектов, имеющих 100 треугольников
  • один объект, имеющий 1000 треугольников

Ответы [ 4 ]

4 голосов
/ 27 мая 2011

При каждом вызове отрисовки OpenGL ES есть некоторые накладные расходы, поэтому, если бы вы представляли 10 объектов по отдельности, используя glDrawArrays() или glDrawElements(), это обычно было бы медленнее, чем один большой объект. Тем не менее, я думаю, вы обнаружите, что издержки от этих вызовов отрисовки являются лишь небольшим фактором при любых замедлениях рендеринга, которые вы можете испытать на устройствах iOS.

Если эти десять объектов являются статическими, довольно легко использовать индексированные треугольники, чтобы объединить их все в один массив, который рисуется за один вызов. Как указывает Вальдхайнц, в статье , которую я написал три года назад , содержится призыв использовать объекты буфера вершин (VBO) для сохранения геометрии в графическом процессоре и предотвращения дорогостоящих загрузок в каждом кадре. В то время, когда я это писал, это было не так важно, как новые графические процессоры iOS, обеспечивающие аппаратную поддержку VBO.

Другие факторы с большей вероятностью влияют на производительность, например, используют ли эти объекты прозрачность, сложность освещения на них и т. Д. В случае сомнений следуйте рекомендациям Apple " Рекомендации по работе с данными вершин ". , как указано в их Руководстве по программированию OpenGL ES для iOS, и профилируйте свое приложение, используя драйвер OpenGL ES и инструменты OpenGL ES Analyzer.

1 голос
/ 27 мая 2011

Это не будет иметь большого значения, если вы не используете VBO.Но тогда рисование 1 объекта происходит быстрее, чем рисование 10 объектов.Кто-то подробно об этом уточнил здесь .

0 голосов
/ 27 мая 2011

Количество треугольников в обоих случаях одинаковое, поэтому они эквивалентны, все остальные равны.GL ничего не знает о ваших «объектах» - он просто визуализирует треугольники.

Тем не менее, может быть некоторая экономия размера данных, если вы разделяете вершины между треугольниками внутри объектов и используете треугольные полосы или вееры илииндексированные вершины.См. Ответ Брэда для более подробной информации о земле.

0 голосов
/ 27 мая 2011

Когда количество треугольников фиксировано, рисование одного объекта всегда должно выполняться быстрее, чем рисование нескольких объектов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...