Текстуры пола и стен честно реквизированы из "The elder scrolls: Arena" для сравнения степени схожести своей игры с неповторимым оригиналом.
Видео выше демонстрирует, на чём я сейчас остановился.
Как я до этого дошёл, и почему остановился? Сейчас я всё объясню.
Сначала у меня был невероятно простенький алгоритм (на основе клеточного автомата) для создания двумерных пещер:
А ещё у меня была игра "The elder scrolls: Arena". И я знал, что она использует псевдотрёхмерный движок, но особо в это не углублялся. Потом я увидел где-то заметку в духе "Псевдотрёхмерный движок за 91 строчку кода!". Прочитав и осознав, я вдруг понял, чего я хочу.
Я хочу бродить по своим пещерам в псевдотрёхмерной бродилке собственного написания.
Сказано - сделано. И вот на свет появляется первый прототип:
Я не буду объяснять в этой статье принцип работы псевдотрёхмерной графики. Для знающих английский уже есть прекрасная статья (вероятно, лучшая) о том, как сделать псевдотрёхмерный графический движок:
https://lodev.org/cgtutor/raycasting.html
Но этот вариант меня не удовлетворял. 12 кадров в секунду при полном отсутствии текстур? Ужасно! НИП? А их тоже нет!
Потом я решил добавить многоэтажность. Трёхмерность в псевдотрёхмерный движок. Прямо как это сделали разработчики игр в реальности (к слову, в Арене тоже есть некоторая вертикальность)
Принцип работы многоэтажной отрисовки очень простой:
Это просто сдвиг этажей на дробную часть высоты этажа. К слову, точно также рисуются и ямы, и даже прыжки.
Следующим этапом был текстурированный пол/потолок.
Главной проблемой текстурного пола является то, что отрисовка стен для одного кадра занимает x операций, а отрисовка пола x*y/2 операций. Между тем без текстур пола не обойтись. Как я буду решать эту проблему? Очень просто. Я обращусь к статье по ссылке, которую давал выше.
Эксперимент: я вырезал интерфейс своей "игры" и Арены, и наложил его на скриншоты из обеих игр.
И тут внезапно оказалось, что раз я делал всё в тестовом режиме, "просто посмотреть, что получится", то итоговый вариант с точки зрения кода и подключения к физическому игровому движку абсолютно ужасен.
ОКОНЦОВКА
Вышло сумбурно и непонятно, просто хотелось поделиться своей поделкой.
Однако у меня есть планы:
1. Если есть интерес, то я могу сделать перевод предположительно лучших статей про создание псевдотрёхмерного графического движка
2. Вся статья была про графику, и даже не столько про графику, сколько про то, что у меня в итоге получилось. Тем не менее, проект задумывался игрой, и про это у меня тоже есть скоро будет что сказать -- я уже активно пытаюсь спроектировать игровой движок с поддержкой модификаций. И даже если у меня не получится добавить моды, то редактор карт и существ будет, как и бродилка по пещерам, т.е. игра.