-
Это не реалтайм :) Движок пошаговый именно за счёт размена скорости на качество. Хотя в нём используется постепенное улучшение картинки, т.е. рендер начинается с низкого качества. И в принципе, можно около трёх шагов в секунду делать, если картинка 64x256 устраивает. Я же вон повыше выкладывал версию 220502a, в ней можно на это посмотреть.
Да, с математикой пришлось подзаморочиться, вот в варианте, где уже лабиринт -- там честная трассировка луча. 256 лучей. Как ни странно, удалось сделать довольно быстро.
-
Цитата:
Сообщение от
Sandro
честная трассировка луча
Вот это даже интересно как делалось на БК где даже умножения с делением нету. Так-то понятно - по каждому X экрана идет луч (на игровом поле будто линию рисуем) - ищем пересечения с непустым кубиком поля. Потом мол с какой его стенкой надо определить. А дальше как мол разве не тангенсы/катангенсы нужны чтобы определить в какой именно пиксель стенки попал луч?
-
Нет, не нужны. Для случая, когда взгляд сонаправлен с одной из координатных осей, достаточно теоремы Фалеса о пересекающихся отрезках. Правда, когда я написал пробный рендер на PC, то посмотрел я на некоторые особые случаи трассировки и как-то мне грустно сделалось переписывать всё это на ассемблер. Поэтому пока что я просто посчитал таблицу трасс, да и всё. Потом уберу из неё тривиальные пересечения. Ну а потом, наверное, всё же перепишу на чистую математику. Код выходит довольно простой и быстрый, но местами заморочный. Ну а пока так. Хотя в принципе есть промежуточный вариант с таблицей всего в 128 байт. Возможно, возьму его.
Соейчас мне более интересна полноценная ходьба по карте, а далее -- отрисовка спрайтов.