Лучше комбинировать плитки вместе, чтобы сформировать один большой атлас текстуры. Предполагая, что вы используете 32x32 пиксельные плитки, текстура 2k может содержать до 4096 различных фрагментов, что потенциально более чем достаточно для игры. Причина в том, что вы можете связать эту текстуру один раз и сделать (почти) весь рендеринг с ней, избегая дорогостоящей операции переключения текстур. Не используйте отдельные рисунки для каждой плитки. Все текстуры и другие ресурсы рендеринга должны загружаться спереди, как правило, при загрузке игры или загрузке уровня.
Что касается реальных плиток и объектов, вы должны создать буфер вершин, который содержит атрибуты вершин для всех объектов и загрузить его во время загрузки уровня. Этот буфер будет содержать позиции вершин, цвета, координаты текстур ... все, что вам нужно для рисования плит, и его можно разбить на несколько буферов, если этого недостаточно. Для каждого фрейма вы используете координаты камеры, чтобы узнать, какие плитки видны, а какие - нет, затем выпустите ничью с начальным индексом первой видимой плитки и количеством видимых фрагментов. Простая проверка AABB здесь очень хороша. Разумеется, для достижения этого буфер вершины должен быть выложен таким образом, чтобы он шел только в одном направлении, например. слева направо и сверху вниз.
В качестве альтернативы вы можете перейти к более сложной подсчету вершины за счет еще нескольких вызовов рисования: разбиение мира на куски, чтобы каждый кусок был достаточно большим, чтобы покрыть весь экран. Создайте буфер вершин для каждого фрагмента, как описано выше. Затем выполните одну и ту же проверку камеры, чтобы узнать, какой кусок виден и нарисовать. В этом случае вы видите как минимум 1 кусок и не более 4 кусков, видимых в любой момент времени, что означает от 1 до 4 вызовов. Этот подход немного более выгоден, чем предыдущий, потому что вместо того, чтобы перебирать каждую отдельную плитку, вы можете перебирать куски, что означает, что требуется гораздо меньше проверок.
Если вы сделали правильно, вам, вероятно, не понадобится больше, чем несколько призывов к рисованию для рендеринга мира и сможете рисовать огромное количество плиток. По-видимому, это означает только для статических объектов, вам придется рисовать динамические объекты по-разному. Имейте это в виду, что призывы рисования могут переключиться в контекст, и их следует избегать, когда это возможно.
Современные графические процессоры могут отображать десятки миллионов треугольников в секунду. Второй способ может быть немного быстрее, но это не имеет значения, когда вы используете только 0,01% от емкости для начала. – immibis
Ohhh. Ну, я читал где-то раньше, как у какого-то парня было около 700 спрайтов на экране, и из-за этого у него было значительное отставание, но я думаю, он не уточнил, какова была резолюция для этих спрайтов. Тем не менее, я буду использовать 16x16 или 32x32, поэтому я думаю, что вы правы. – CosmicKidd
Он, вероятно, отбрасывал свои спрайты глупо, как перегружая их каждый кадр. – immibis