2017-02-04 3 views
0

Я программирую приложение для Android, где нарисована сетка, которую вы можете перемещать и двигаться в этом направлении. Сетка состоит из примерно 2000-5000 квадратов, каждая с другой текстурой. Я определил 4 вершины и использовал индексный буфер для рисования каждого квадрата. Перед рисованием я позиционирую его, используя модельную матрицу. Поскольку вы можете перемещаться по моей сцене, я использую просмотр отступов, который увеличивает производительность в некоторых ситуациях. К сожалению, может быть случай, когда мне нужно будет нарисовать все квадрациклы, поэтому я хочу спросить, как предотвратить медленный рисунок.Рисование многих текстурированных отрядов OpenGL ES 2.0

Я не могу использовать атлас текстуры, поскольку все текстуры довольно большие (от 256x256 до 1024x1024). Я думаю, что вызов glDrawElements() для каждого отряда делает меня медленным, но я не знаю, как я могу его изменить.

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

Я с нетерпением жду любой помощи.

+0

Подготовьте партии квадроциклов, которые используют одни и те же текстуры для уменьшения накладных расходов. – WLGfx

+0

256x256x4 x 2000 = ~ 524MB. Вы ничего не упоминаете о mipmaps, но, чтобы приблизиться к разумной частоте кадров, вам, скорее всего, понадобятся, потому что это слишком много данных для большинства мобильных графических процессоров для обработки. – MuertoExcobito

ответ

0

Я не могу использовать атлас текстуры, так как все текстуры довольно большие (от 256x256 до 1024x1024).

Вы можете поместить 64 256x256 текстуры в атлас 2048x2048, это огромная сумма, поэтому вы должны обязательно атлас. Даже получить 4 1024x1024 на 2048x2048 стоит сделать, он может округлить ваш счетчик обратного вызова.

И как WLGfx говорит в комментариях к вашему вопросу, вы должны дозировать любые квадроциклы, которые используют ту же текстуру (при atlasing их будет намного больше).

Я думаю, этого было бы достаточно, но у вас все еще может быть довольно высокий показатель drawcall в вашем полностью увеличенном виде. После внедрения atlasing и пакетной обработки, если производительность здесь по-прежнему остается проблемой, вы можете создать отдельный набор атрибутов текстур большого пальца ног, например, по четвертому разрешению (поэтому 256x256 станет 64x64). Этот набор значков для миниатюр поместился бы на несколько листов атласа 2048x2048, и вы могли бы переключиться на него при достаточно большом увеличении.

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

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

Смежные вопросы