aboutsummaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
authorValentin Popov <valentin@popov.link>2026-10-18 05:09:48 +0300
committerValentin Popov <valentin@popov.link>2026-10-18 05:09:48 +0300
commitd97c8d40bfbae097435f10e46ecad5431504c729 (patch)
treeab7c4cb3eb13ff4b4a88cf34f0a33bfe70ed9e4a /docs
parente5d273158cd27545479276120dba8c02913f7930 (diff)
downloadfparkan-d97c8d40bfbae097435f10e46ecad5431504c729.tar.xz
fparkan-d97c8d40bfbae097435f10e46ecad5431504c729.zip
Match free-flight camera to native projection
Diffstat (limited to 'docs')
-rw-r--r--docs/reference/render-frame.md21
1 files changed, 21 insertions, 0 deletions
diff --git a/docs/reference/render-frame.md b/docs/reference/render-frame.md
index f8aee38..de71603 100644
--- a/docs/reference/render-frame.md
+++ b/docs/reference/render-frame.md
@@ -143,6 +143,27 @@ RVA `0x4EBE0` использует соглашение о вызовах `__std
`0x481C5`. Это преобразование применяется только на границе неба и не меняет
рыскание или управление движением `FreeFlightCamera`.
+## Камера свободного полёта
+
+Начальный профиль использует `near = 0.5`, `far = 700` и горизонтальный FOV
+`1.3` рад — параметры, наблюдавшиеся в проверенном контексте GOG Ngi32
+([формула native projection](../tomes/05-render.md#камера-и-размещение-в-оригинале)).
+Для отношения ширины к высоте `a` превью вычисляет вертикальный угол
+```rust
+fn vertical_fov(self, aspect: f32) -> f32 {
+ 2.0 * ((self.horizontal_fov * 0.5).tan() / aspect).atan()
+}
+```
+
+Код заменяет невалидный `aspect` на отношение 16:9; горизонтальный угол
+остаётся `1.3` рад после изменения размера окна, а новый viewport и матрица
+камеры применяются при следующей отрисовке.
+
+Проекция направления не сравнивает косинус угла с ближней дистанцией: она
+отбрасывает только лучи за камерой и почти параллельные плоскости изображения
+(`forward · direction <= 1e-4`). Лучи в передней полусфере могут проецироваться
+за край viewport; владелец спрайта отдельно решает, нужно ли его рисовать.
+
## Ограничения точного совпадения
`VulkanStaticCamera::from_legacy_d3d7` выполняет восстановление вида и проекции