From 437e8d63073c1a5a360e48e7796eb42720cf64c2 Mon Sep 17 00:00:00 2001 From: Valentin Popov Date: Fri, 30 Oct 2026 18:01:37 +0400 Subject: fix(camera): constrain free flight to terrain surface bounds --- docs/reference/render-frame.md | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'docs/reference') diff --git a/docs/reference/render-frame.md b/docs/reference/render-frame.md index 3085731..8cba630 100644 --- a/docs/reference/render-frame.md +++ b/docs/reference/render-frame.md @@ -181,6 +181,21 @@ fn vertical_fov(self, aspect: f32) -> f32 { (`forward · direction <= 1e-4`). Лучи в передней полусфере могут проецироваться за край viewport; владелец спрайта отдельно решает, нужно ли его рисовать. +После движения свободная камера ограничивает X и Y прямоугольником +поверхностей карты, затем поднимается над найденным рельефом на заданный +зазор. Границы берутся из корня пространственного индекса `TerrainWorld`, +поэтому неиспользуемые вершины файла их не расширяют и повторного обхода +геометрии в каждом кадре нет: + +```rust +position[axis] = position[axis].clamp(min[axis], max[axis]); // axis = 0, 1 +position[2] = position[2].max(ground_height + ground_clearance); +``` + +Высота полёта сверху не ограничена. Это ограничение диагностической камеры +превью; столкновения со стенами зданий и точные правила игровых камер оригинала +остаются отдельными задачами. + ## Ограничения точного совпадения `VulkanStaticCamera::from_legacy_d3d7` выполняет восстановление вида и проекции -- cgit v1.2.3