fix(capture): replay the projection used by world geometry
Docs Deploy / Build and Deploy MkDocs (push) Successful in 39s

This commit is contained in:
Valentin Popov committed 2026-10-31 23:13:22 +04:00
1 parent 8a2c3e9840
commit 853d9b115a
7 files changed
+409 -170

No files matched your search

+11
View File
@@ -225,6 +225,17 @@ RVA `0x4EBE0` использует соглашение о вызовах `__std
`right - left` на `bottom - top`. Размер окна превью закреплён: если при
запуске или после ненулевого изменения окна физический размер не совпадает с
заданным, приложение завершает работу, а не растягивает изображение.
Проекция во время рисования может отличаться от восстановленного состояния
камеры после обхода мира. В GOG у `CStridedPrimitive::RenderVB` (Terrain RVA
`0x1D110`) renderer содержит `near = 0.5`, а на границе World3D RVA `0x13CE4`
уже `near = 5`. Поэтому захват отдельно сохраняет `geometry_projection` при
первом вызове геометрии с той же мировой матрицей камеры. Поток, поколение,
renderer, viewport, far и FOV сверяются с последующей границей; только
подтверждённая запись используется при воспроизведении. Иначе пол в трёх
единицах от камеры может исчезнуть из-за чужой ближней плоскости. Старые JSON
без этой записи сохраняют прежнее поведение с явным счётчиком
`captured_projection_unverified`; их нужно переснять для проверки близких поверхностей.
Сравнивайте результат с фрагментом исходного PNG по прямоугольнику
`[left, top, right, bottom]`. В этом режиме `FreeFlightCamera` не создаётся,
но при повторной отрисовке обновляются окружение и проецируемые тени для