diff options
Diffstat (limited to 'docs/reference')
| -rw-r--r-- | docs/reference/render-frame.md | 21 |
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` выполняет восстановление вида и проекции |
