Как оценить объём работы, разрабатывая ремастер?
Gamedev
Владимир Семыкин

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

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

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

Игра, над которой работает ValerADHD
Сперва нам нужен герой
На самом деле достаточно лишь определить его положение в пространстве, поэтому вместо персонажа можно поставить простую точку
Важно обозначить направление героя, поэтому добавим стрелку
Теперь приступаем к созданию сцены. Сперва добавим несколько точек. Это углы комнаты
Теперь соединим их линиями. Они представляют стены
На этом этапе у нас есть герой, направление и окружение. Начнём переносить это всё в 3D
Давайте сохраним эту базовую конфигурацию и поместим её в верхний левый угол
Сперва повернём игрока и окружение, чтобы герой смотрел наверх
Теперь изобразим линию, которая перпендикулярна направлению взгляда игрока. Она показывает плоскость камеры 
Далее нам нужно получить расстояние каждой точки относительно плоскости камеры
Так как камера постоянно будет поворачиваться, нам нужно получить только значение по оси Y
Отрицательные значения будут мешать нам на более поздних этапах, поэтому их мы учитывать не будем
Обрезаем все стены, проходящие через плоскость камеры, и удаляем всё, что находится позади неё
В перспективной проекции близкие к камере объекты выглядят больше, а отдалённые — меньше
Это свойство можно эмулировать, разделив значения точек по оси X на их расстояние от камеры
Затем увеличим значения по оси X, чтобы расположение точек и линий соответствовало экрану
Все ключевые действия сделаны. Теперь опустим линии к центру экрана
Затем сделаем из точек линии, которые представляют вертикальные грани в углах комнаты. Используйте для этого их удалённость от камеры
Изобразите линии, которые показывают места соприкосновения с полом и потолком
Теперь нужно лишь залить стены цветом. Всё готово
Полное видео
{ "author_name": "Владимир Семыкин", "author_type": "editor", "tags": ["\u0440\u0430\u0437\u0431\u043e\u0440","\u043e\u043f\u044b\u0442","\u0430\u0440\u0442"], "comments": 13, "likes": 132, "favorites": 205, "is_advertisement": false, "subsite_label": "gamedev", "id": 647321, "is_wide": true, "is_ugc": false, "date": "Tue, 02 Mar 2021 20:12:58 +0300", "is_special": false }
0
13 комментариев
Популярные
По порядку
Написать комментарий...

Голодный завод

8

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

Ответить
5

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

Ответить
1

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

Ответить
0

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

Ответить
0

В видео то есть, но тем способом, который он здесь описывает, их точно не добиться.

Ответить
4

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

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

Ответить
3

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

Ответить
1

Благодарю за наглядную статью о механизме отображения 3D. 

Ответить
0

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

Ответить
0

Красиво

Ответить
0

Где - то на Хабре был полный гайд со всеми формулами.

Ответить
0

ray casting гуглил и радовался жизни)

Ответить
0

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

Ответить

Комментарии

null