![]() |
![]() |
WilD_t |
![]()
Сообщение
#1
|
Группа: Пользователи Сообщений: 4 Пол: Мужской Репутация: ![]() ![]() ![]() |
В сети этих самых сабжевых исходников может и много, вот только код изобилует рющечками и прибамбасами, а за ними весь смысл, стержень, алгоритм - теряется для понимания. Может есть у кого исходник трёхмерного лабиринта с возможностью по оному перемещаться. Есть желание наконец таки понять, как происходит построение плоскостей и изменения угла обзора.
![]() |
![]() ![]() |
Archon |
![]()
Сообщение
#2
|
![]() Профи ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 618 Пол: Мужской Репутация: ![]() ![]() ![]() |
Значтьс вот.
У меня построения плоскостей не производится. Как так? Попробую объяснить... Карта представлена в виде банального двумерного массива. В нём числа: 0 - пустота 1 - стена можно и другие числа использовать, например 2 - точка старта 3 - выход 4 - мостр типа 1 5 - монстр типа 2 (кстати и стены можно сделать разные и назначить на разные числа) Далее есть система мировых координат. 100 (к примеру) единиц расстояния в мировых координатах соответствуют 1 в координатах карты. Собственно именно в мировых координатах перемещается игрок. Далее рисование кадра. В простейшем случае это выглядит так: Из точки нахожжения персонажа последовательно испускаются столько лучей, сколько у тебя горизонтальное разрешение экрана. Лучи эти идут до пересечения со стеной. После обнаружения пересечения (используя алгоритм Брезенхама, например) фиксируем длинну луча (лучше не длинну, а расстояние от точки пересечения до плоскости, перпендикулярной направлению взгляда и проходящую через местоположение персонажа). Затем зная растояние до стены расчитываем видимую высоту стены в данной точке (лучше расчитать заранее и забить в массив) и рисуем вертикальную линию соответствующей длинны в центре экрана. Таким образом при рисовании кадра экран заполняется вертикальными полосами слева на право. После отрисовки стены можно спрайты поверх нарисовать и тд. Насчёт вращения. Понятное дело что угол направления взгляда нужно хранить в памяти и учитывать при отрисовке, но тут есть одна хитрость, позволяющая упростить вычисления: окружность лучше делить не на 360 градусов, а на MaxY*(360/LAng), где MaxY - горизонтальное разрешение экрана, а LAng - угол обзора в градусах. Например Если разрешение - 320 пикселов, а угол обзора - 60 градусов, то значит что угол обзора в 60 градусов соответсвует экрану шириной в 320 пикселов и окружность следует делить на 1920... не знаю чего... ![]() ![]() Фу.... вот. Вопросы??? -------------------- Close the World...txeN eht nepO
|
![]() ![]() |
![]() |
Текстовая версия | 8.08.2025 12:35 |