← Урок: 3D-конвейер/Лаба: растеризатор куба
EN
Lab · потрогать руками

Мини-растеризатор куба

Куб, прогнанный через ту же цепочку model→view→проекция→экран чистым software-растеризатором (барицентрика, без GPU). Крути куб и FOV, выключай z-буфер — и смотри, как дальние грани лезут поверх ближних; включай backface culling и переключай перспективу/ортографию. Каждый тумблер — отдельный шаг конвейера, который видно глазами.
🏠 эксперимент~10 мин
Как пользоваться
Каждый кадр все 12 треугольников куба поворачиваются, проецируются (x_s = f·x/z) и заливаются по пикселям. Z-буфер: на каждый пиксель храним ближайшую обратную глубину 1/z и рисуем фрагмент, только если он ближе. Выключи его — и порядок отрисовки начнёт врать. Backface cull по нормали грани выкидывает повёрнутые от нас грани. Перспектива делит на глубину (дальнее меньше); ортография — нет (грани одного размера). Счётчики показывают: нарисовано треугольников, отбраковано backface, фрагментов отвергнуто z-тестом.
Что заметить: 1) сними z-буфер и backface cull разом, включи авто-вращение — задние грани протыкают передние, картинка «мерцает» порядком отрисовки. Верни z-буфер — стало верно при любом порядке. 2) сними только backface cull (z-буфер вкл) — видно, что отбраковка половины граней была не нужна для корректности (z-буфер и так разрулил), но счётчик «нарисовано» удвоился: cull экономил работу. 3) переключи на ортографию — куб перестаёт сужаться вдаль, дальние и ближние грани одного размера (нет деления на z). 4) задери FOV к 120° — сильное «рыбий глаз»-искажение у краёв; узкий FOV ≈ телефото, грани почти параллельны.
🏠 Что дальше
Вернись в урок, блок «🔧 Запусти и поковыряй»: в Godot выведи на квад DEPTH_TEXTURE — увидишь ту же глубину, что лаба хранит в z-буфере, но нелинейно распределённую (1/z): ближнее «растянуто», дальнее «слиплось». Поставь две копланарные грани вплотную → поймаешь z-fighting, которого тут на одном кубе не видно.
Связи
из урока
3D-конвейер — теория: цепочка матриц, perspective divide на w, клиппинг по near, z-буфер vs painter.
контраст
Doom и BSP — там порядок рисуют сортировкой геометрии (BSP), тут — буфером глубины по пикселям. Выключенный z-буфер в лабе = почему Doom приходилось сортировать.
Что заметить по итогу (чеклист наблюдений)