Предисловие
В прошлом я хотел ближе познакомиться с компьютерной графикой и одновременно с этим создать уже что-то рабочее. Погружаться в мир шейдеров оказалось не таким интересным занятием: нельзя было получить быстрый результат, сорвать низко висящий фрукт, поэтому я отложил изучение шейдеров в долгий ящик и решил найти для себя иной подход. На глаза попадались статьи про такую технику отрисовки, как Raycasting. Если вы немного помните курс школьной геометрии и умеете программировать, то достаточно будет потратить несколько выходных, чтобы создать свой мир в виде лабиринта.
Изучив эту технику, я реализовал браузерную игру, похожую на продвинутую версию Wolfenstein 3D, с использованием паттерна Entity-Component-System (плюс спасибо ребятам за систему подсветки и открывание дверей):

Однако многие, кто не знаком с отрисовщиками прошлого, скажут, что эта игра похожа на DOOM, но, к сожалению, это не он. И, кстати, некоторые разработчики не стесняются этим незнанием пользоваться: например, проект DOOMQL под капотом содержит wolf3d-like отрисовщик:

Чтобы передать другим свой опыт изучения raycasting, я реализовал отдельное raycasting demo, где любой может проанализировать, как заданные параметры отрисовки влияют на конечный результат:

Что ж. Теперь настало время перейти к DOOM-like отрисовщику.