diff options
| author | Valentin Popov <valentin@popov.link> | 2026-10-11 16:37:48 +0300 |
|---|---|---|
| committer | Valentin Popov <valentin@popov.link> | 2026-10-11 16:37:48 +0300 |
| commit | 100f656b089898e4ffef48871f5ed5ea068d54b6 (patch) | |
| tree | 46bede940909108a40fef0bcca6ab7a2795c3ed0 /docs/tomes/05-render.md | |
| parent | 7b7324a413449b21b1d29f77a36abfe282c045e6 (diff) | |
| download | fparkan-100f656b089898e4ffef48871f5ed5ea068d54b6.tar.xz fparkan-100f656b089898e4ffef48871f5ed5ea068d54b6.zip | |
Fix terrain height and native frame capture
Use raw world-space terrain heights throughout mesh, camera-floor, shadow, and sun-ray paths while preserving the projection far-plane conversion. Complete the verified selected-camera readback flow with frozen phase sampling, capture tooling, and documentation.
Diffstat (limited to 'docs/tomes/05-render.md')
| -rw-r--r-- | docs/tomes/05-render.md | 27 |
1 files changed, 23 insertions, 4 deletions
diff --git a/docs/tomes/05-render.md b/docs/tomes/05-render.md index 71cad1d..16dd94f 100644 --- a/docs/tomes/05-render.md +++ b/docs/tomes/05-render.md @@ -871,9 +871,12 @@ RVA `0x36610` строит `Rz(z) * Ry(y) * Rx(x)` с переносом в по Повороты и переносы узлов модели применяются до размещения объекта в миссии. Горизонтальная плоскость карты — XY, высота — Z. У GOG AutoDemo диапазон XY -ландшафта составляет `0..1190.6976`. Высоты, сохранённые в `Land.msh`, переводятся -в единицы мира делением на 32. Это отдельное преобразование ландшафта; -применять его к координатам размещённых объектов нельзя. +ландшафта составляет `0..1190.6976`, а исходный диапазон Z в `Land.msh` — +`0..94.50981`. Проверенный native frame с той же камерой совпадает с силуэтом +ландшафта при прямом использовании исходного Z; деление на 32 опускало бы этот +горизонт примерно на 185 пикселей. Terrain, camera floor, shadow receivers и +sun-ray queries поэтому используют исходные координаты `Land.msh` без +преобразования Z. `Ngi32!niGet3DRender` (RVA `0x5640`) возвращает графический интерфейс. Вызов Direct3D7 `SetTransform` устанавливает projection из RVA `0x7030` @@ -946,7 +949,23 @@ projected shadows и audio events обновляются вместе с камÐ `--atmosphere-seconds` задаёт старт времени, `--frames 0` оставляет цикл бесконечным, а `--preview-roots` служит только диагностическим ограничителем. `--legacy-camera-capture` выбирает воспроизводимую камеру без free-flight -управления. +управления: запись selector 0 задаёт D3D7 transform, clip параметры и native +viewport RECT `[left, top, right, bottom]`. Путь сохраняет оси basis из view +matrix вместе с roll, переносит полученный `clip_from_world` в preview camera, +переводит RECT в физический drawable размер `(right - left) × (bottom - top)` +и отклоняет несовпадение размера при +создании или resize вместо растягивания кадра. Результат нужно сравнивать с +тем же crop исходного PNG `[left, top, right, bottom]`. Контроллер +`FreeFlightCamera` в этом режиме не создаётся, но redraw продолжает обновлять +environment и projected shadows от captured camera. Перед environment update и +его audio events listener получает position, forward и up captured camera; +начальная сортировка world draw использует её же position. Phase capture может +содержать наблюдаемый mission path и проверенный `atmosphere_seconds`; viewer +использует эту абсолютную фазу по умолчанию, если не указан явный CLI override, +и удерживает sample атмосферы на ней через readback frames. FX по-прежнему +получает реальный frame time. Это не полное simulation time: `weather`, RNG и +остальное mission state остаются неизвестными, поэтому совпадение камеры и +фазы не доказывает visual parity с native frame. Для сохранения кадра surface должен поддерживать `TRANSFER_SRC`. Renderer копирует последний отправленный swapchain image в host-visible buffer и |
