Как расстояние до стены задаёт её высоту
Плоская карта для такого движка — не просто схема уровня, а набор данных: здесь стена, здесь проход, здесь пустое пространство. Для каждой вертикальной полосы экрана программа выбирает направление взгляда и проверяет, где луч впервые пересечёт стену. Ближняя стена должна выглядеть крупнее, дальняя — меньше, поэтому высоту полосы вычисляют по расстоянию до точки столкновения: чем оно больше, тем ниже полоса.
Это упрощённая версия перспективы. В настоящей трёхмерной сцене пришлось бы учитывать положение и форму множества объектов в пространстве; здесь же достаточно повторить расчёт для ряда направлений и получить изображение стены слева направо.
От точки столкновения к текстуре
Одной высоты мало: нужно понять, какую часть рисунка стены показать. Место, где луч попал в стену, подсказывает координату на её поверхности. Движок берёт соответствующую вертикальную полоску текстуры и растягивает её до рассчитанной высоты. Так кирпичная кладка или каменная поверхность сохраняют рисунок, хотя сама стена описана на карте лишь линией или участком сетки.
Есть и важная поправка: лучи по краям экрана идут под углом к направлению взгляда. Если просто использовать их длину, боковые стены получатся чрезмерно вытянутыми — возникает «рыбий глаз». Поэтому движок учитывает угол луча и оценивает расстояние относительно направления камеры.
Выигрыш и пределы упрощения
Расчёт по полосам был удобен для компьютеров, которым трудно было быстро обрабатывать полноценные трёхмерные сцены: для каждой части экрана требовалось найти ближайшую стену, а не просчитывать сложную геометрию всего мира. Но такой способ естественно подходит прежде всего для вертикальных стен одинаковой высоты. Наклонные поверхности, свободно расположенные объекты и сложные уровни требуют отдельных ухищрений.
Поэтому убедительная глубина возникала не из объёмной карты, а из точной связи между тремя вещами: направлением взгляда, расстоянием до стены и размером её изображения. Стоило игроку повернуть, как набор лучей пересчитывался — и плоская схема снова складывалась в коридор.






