Как мне сделать многоуровневое рисование в движке 2d opengl? - PullRequest
2 голосов
/ 24 июня 2011

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

Должен ли я разделить объекты на разные контейнеры в зависимости от того, на каком слое они находятся, или я должен использовать какой-то буфер, чтобы нарисовать их на отдельных слоях, а затем смешать их вместе в конце?Если я использую последнее, что я должен использовать или как именно это сделать?

Спасибо за помощь!

Ответы [ 2 ]

1 голос
/ 24 июня 2011

Звучит так, как будто вы уже достаточно хорошо разбираетесь в том, что вы собираетесь делать.Я предполагаю, что решение между сортировкой объектов или рендерингом всех слоев, а затем их компоновкой, немного произвольно.Если вы собираетесь применять различные эффекты для каждого слоя или пытаться повторно использовать определенную графику (например, если у вас есть фоновый слой, который редко обновляется или может работать с более низкой частотой кадров в секунду), тогда использование системы на основе слоев имеет больше смысла.С другой стороны, если вы все равно будете перерисовывать все каждый кадр и вам не нужны причудливые трюки для каждого слоя, вам было бы лучше просто отсортировать объекты, так как для разгона всех текстур использовалась бы меньшая память / частота заполнения GPU.вокруг.

0 голосов
/ 24 июня 2011

Я бы хотел процитировать заключение этой статьи :

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

Это в основном вопрос того, что вы готовы терпеть и что вы априори знаете о содержании вашей сцены.

Согласен, большая часть зависит от того, что вы рисуете.

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

Возможно, было бы лучше реализовать отсортированное дерево объектов, чтобы избежать сортировки каждого объекта в каждом кадре. Но все зависит от организации объектов и ограничений приложения.

...