Введение
Весь этот проект — это моя попытка с нуля воссоздать рендер на TypeScript в браузере похожий на тот, каким он был сделан в DOOM 1993 и оставить после себя артефакт, объясняющий другим, как все работает под капотом. Конечно, уже существуют такие проекты, как, например, репозиторий DIYDoom или такая замечательная книга, как Game Engine Black Book DOOM. И пусть в них описывают некоторые основные идеи и даже показываются реализации, но они не раскрывают суть, почему в прошлом было сделано именно так или иначе.
С одной стороны, мне хотелось столкнуться со сложностями отрисовки из прошлого, чтобы сравнить мои первые наивные идеи с тем, как это по итогу было сделано в DOOM. С другой стороны, только проделав путь самому, можно попытаться объяснить, почему в прошлом были сделаны именно такие шаги. И именно благодаря попытке воссоздать все с нуля у меня появилась интуиция, зачем был необходим алгоритм Binary space partitioning. Не знаю, какие изначально были мысли у Джона Кармака, но когда вы доберетесь до раздела, посвященного BSP, и столкнетесь с проблемой, которую предстоит решить, то введение этого алгоритма будет чертовски уместным.
То, что повествуется на этом ресурсе — это не пошаговая реализация отрисовщика DOOM, это использование идей из DOOM, поэтому финальный результат может отличаться от оригинала. Здесь я иду своим путем, опираясь на свой и чужой опыт. Например, так же, как и в прошлом, я сделаю все вычисления геометрии и текстур на CPU. Так же, как и в прошлом, я использую понятия секторов и порталов. Так же, как и в прошлом, я изучаю и применяю алгоритм Binary space partitioning.
Проект находится в стадии активной разработки, поэтому если вы найдете опечатки или у вас будут предложения по улучшению этого проекта, не стесняйтесь создавать issues на github.
Добро пожаловать и приятного чтения!