2.5D Renderer

Stage 1: Отрисовка стен

Алгоритм художника

Сейчас стены отрисовываются в том порядке, в каком были описаны для уровня, и может получиться так, что фактически самая дальняя от камеры стена нарисуется ближе всех или наоборот. Чтобы вам было визуально проще обнаружить проблему, на демо ниже я разукрасил стены различными цветами.

2.5D Renderer

2D Renderer

Решение проблемы заключается в том, чтобы отсортировать стены по расстоянию от камеры перед их отрисовкой. Сначала рисуем дальние стены и только затем ближние. Кстати, такой алгоритм отрисовки называется Алгоритмом художника:

2.5D Renderer

2D Renderer

Управление камерой WASD

Однако у алгоритма художника есть один большой недостаток — он может делать ненужные отрисовки.

Представьте: вы находитесь перед стеной, причём стена полностью попадает в область видимости камеры, и больше на экране, кроме этой стены, ничего в конечном счёте не должно быть отрисовано. Одновременно с этим за этой стеной находится бесконечное количество стен на различном удалении от камеры. Согласно алгоритму художника, нам придётся отрисовать все эти стены от дальней к ближней, хотя в действительности необходима только одна. Мы делаем лишние отрисовки. Другими словами, может получиться так, что мы покрасим некоторые пиксели на экране несколько раз.

Реализация шага на github