Match free-flight camera to native projection
Docs Deploy / Build and Deploy MkDocs (push) Failing after 2m47s
Docs Deploy / Build and Deploy MkDocs (push) Failing after 2m47s
This commit is contained in:
2 files changed
+161
-21
No files matched your search
@@ -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` выполняет восстановление вида и проекции
|
||||
|
||||
Reference in new issue
Block a user