Как визуализировать 3D-пространство в стиле Doom — описание главных принципов

2D-пространство изящно превращается в объёмное окружение.

Пользовательница твиттера под ником ValerADHD опубликовала краткий разбор метода, который позволяет визуализировать 3D-пространство в стиле Doom. Разработчица использовала движок Pico-8, чтобы показать, как всё это работает на практике. Мы выбрали из примера главное.

Игра, над которой работает ValerADHD
Сперва нам нужен герой
На самом деле достаточно лишь определить его положение в пространстве, поэтому вместо персонажа можно поставить простую точку
Важно обозначить направление героя, поэтому добавим стрелку
Теперь приступаем к созданию сцены. Сперва добавим несколько точек. Это углы комнаты
Теперь соединим их линиями. Они представляют стены
На этом этапе у нас есть герой, направление и окружение. Начнём переносить это всё в 3D
Давайте сохраним эту базовую конфигурацию и поместим её в верхний левый угол
Сперва повернём игрока и окружение, чтобы герой смотрел наверх
Теперь изобразим линию, которая перпендикулярна направлению взгляда игрока. Она показывает плоскость камеры 
Далее нам нужно получить расстояние каждой точки относительно плоскости камеры
Так как камера постоянно будет поворачиваться, нам нужно получить только значение по оси Y
Отрицательные значения будут мешать нам на более поздних этапах, поэтому их мы учитывать не будем
Обрезаем все стены, проходящие через плоскость камеры, и удаляем всё, что находится позади неё
В перспективной проекции близкие к камере объекты выглядят больше, а отдалённые — меньше
Это свойство можно эмулировать, разделив значения точек по оси X на их расстояние от камеры
Затем увеличим значения по оси X, чтобы расположение точек и линий соответствовало экрану
Все ключевые действия сделаны. Теперь опустим линии к центру экрана
Затем сделаем из точек линии, которые представляют вертикальные грани в углах комнаты. Используйте для этого их удалённость от камеры
Изобразите линии, которые показывают места соприкосновения с полом и потолком
Теперь нужно лишь залить стены цветом. Всё готово
Полное видео
138138
13 комментариев

Комментарий недоступен

8

Описание только про то, как добиться визуала Вольфентштейн 3Д. В Думе то там графон попродвинутее будет, с лестницами и разными высотами пола.

5

Вот здесь кстати поподробнее про то как это все вообще работает

1

Ступени в видео в посте точно есть

Как нарисовать Сову.

Хотя примерный посыл понятен.

4

Круто, кстати, на пико-8 и непосредственно дум есть https://freds72.itch.io/poom

4

забавненько
спасибо за публикацию :)

3