diff options
| author | Valentin Popov <valentin@popov.link> | 2026-07-18 12:34:05 +0300 |
|---|---|---|
| committer | Valentin Popov <valentin@popov.link> | 2026-07-18 12:34:05 +0300 |
| commit | 3d9a3249540a4e657a54d4a5287d78d798b59284 (patch) | |
| tree | 242d081deaa1035d0f90e94032d12042eefde83f /docs/tomes/08-evidence.md | |
| parent | 564edf0bc1d5fed1cbfc00db2ba5c4cd9d1b94ea (diff) | |
| download | fparkan-3d9a3249540a4e657a54d4a5287d78d798b59284.tar.xz fparkan-3d9a3249540a4e657a54d4a5287d78d798b59284.zip | |
docs(evidence): recover buffering camera projection path
Diffstat (limited to 'docs/tomes/08-evidence.md')
| -rw-r--r-- | docs/tomes/08-evidence.md | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/docs/tomes/08-evidence.md b/docs/tomes/08-evidence.md index 453e793..d4555d2 100644 --- a/docs/tomes/08-evidence.md +++ b/docs/tomes/08-evidence.md @@ -254,6 +254,20 @@ Terrain object. Следовательно, selector `18`, slot `+12` и global должны оставаться именованными evidence boundary до dynamic capture; считать `stdGetCurrentCamera2` getter-ом переданной camera было бы ошибкой. +Повторный headless-IDA review той же GOG базы уточняет рабочий static contract +`CBufferingCamera`. Метод Terrain RVA `0x4D740` копирует ровно 64 байта +(16 dword) в component offset `+0x10`. Frame-preparation метод RVA `0x4D9C0` +получает viewport rectangle через virtual slot `+0x3C`, выводит width, height, +centre и aspect, а projection читает через camera interface. Для projection type +`0` он использует float по component offset `+0x234` в `tan(angle / 2)`; для +type `2` получает five-float block через slot `+0x70`; иной non-zero type +завершается `Not supported projection type`. Это доказывает зависимость +projection от live camera/viewport, но не row/column convention, единицы угла, +near/far mapping, handedness или initial camera selection. Важно, что строки +`ICamera::SetTransformMatrix` (RVA `0x4F830`) и +`ICamera::GetTransformMatrix` (RVA `0x4F850`) ведут только в obsolete-call +stubs и не дают usable ABI. + Локальная IDA-база уточняет адреса этой связи: `stdGetCurrentCamera2` — это шестибайтный getter по RVA `0x4FD80`, который возвращает `dword` по RVA `0x7355C`. Единственный найденный initializer этого global — функция Terrain |
