← Урок Doom/Лаба: пощупать
EN
Lab 03 · потрогать руками

Пощупай рендер Doom

Лаба без кода: крути ползунки и двигай игрока — формулы из урока оживают прямо здесь, в браузере (и на телефоне). Ничего писать не надо, всё считается на лету.
🏠 эксперимент~15 мин
Как пользоваться
Три живых эксперимента под формулами из урока. Меняешь параметр — картинка и числа пересчитываются мгновенно. Цель не «написать рендер», а почувствовать, почему высота падает как 1/z, почему BSP даёт правильный порядок из любой точки, и сколько экономит front-to-back. Внизу — ноутбук для домашнего компа, если захочешь те же опыты на реальном numpy.

1 · Проекция: высота ∝ 1/z

Высота стены на экране — перспективная проекция. Крути z (глубину) и смотри, как столбец растёт/сжимается:

hscreen=hwall·dprojz,dproj=W/2tan(FOV/2)
Что заметить: удвой z (200→400) — высота падает ровно вдвое. Это и есть 1/z, единственный источник «глубины». Расширь FOV — d_proj падает, и весь мир мельчает (рыбий глаз).

2 · BSP: порядок front-to-back из любой точки

Уровень разбит двумя секущими прямыми на 4 subsector'а. Перетащи игрока (красная точка) — порядок обхода пересчитывается через знак векторного произведения на каждом узле:

s=(vx−px)·dy−(vy−py)·dx
Что заметить: перетащи игрока через пунктирную линию — два ближних листа меняются местами (1↔2). Дерево не пересчитывает геометрию, только знак s на узлах — и порядок всегда верный. Вот почему BSP работает из любой позиции.

3 · Overdraw: что экономит front-to-back

Пять стен в коридоре перекрывают столбцы экрана. Переключай режим и смотри на счётчик записанных пикселей:

Что заметить: с отсечением (front-to-back) каждый столбец пишется один раз — overdraw ≈ 1.0×. В режиме painter (back-to-front) дальние стены рисуются зря и затираются ближними — записей в 2–3 раза больше. На 486 это была разница между «играбельно» и «слайд-шоу».
🏠 Что дальше
Вернись в урок, раздел «🎮 Поиграй / поковыряй» — как запустить настоящий Doom и поломать его (DSDA-Doom для наблюдений, chocolate-doom + брейкпоинт в обходе BSP, nuts.wad для visplane overflow).
Связи
из урока
Doom и BSP — теория за этими тремя экспериментами: проекция, обход дерева, отсечение.
дальше
ECS — тот же «горячий цикл по столбцам» как пример кэш-дружелюбной раскладки.
Что заметить по итогу (чеклист наблюдений)