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