feat(terrain): index surface queries with bvh
This commit is contained in:
@@ -555,6 +555,27 @@ candidate areas, затем выполняется точная геометри
|
||||
Если область не найдена, caller получает явный miss и решает, допустим ли
|
||||
fallback к ближайшей области.
|
||||
|
||||
### Индекс поверхности
|
||||
|
||||
`TerrainWorld` хранит отдельный deterministic BVH по валидированным
|
||||
`TerrainFace28` triangles. Он не заменяет `Land.map` grid: BVH отвечает за
|
||||
низкоуровневые surface queries (`height_at` и `raycast`), тогда как grid и
|
||||
areal graph остаются навигационным контрактом.
|
||||
|
||||
При построении индекс делит triangles по centroid вдоль самой протяжённой оси;
|
||||
в leaf остаётся не более восьми face indices. XY query проходит только листья,
|
||||
чьи AABB покрывают точку, а raycast — только AABB, пересечённые лучом. После
|
||||
выбора кандидатов raycast сортирует их по исходному face index, поэтому при
|
||||
равной дистанции сохраняется прежний deterministic tie-break; `height_at`
|
||||
по-прежнему выбирает максимальную высоту среди действительно покрывающих
|
||||
точку triangles. Индекс меняет стоимость запроса, но не геометрическую
|
||||
семантику.
|
||||
|
||||
Synthetic test проверяет сокращение candidate set и прежние height/raycast
|
||||
results. Licensed run проходит все 33 `Land.msh` Части 1 и 32 файла Части 2:
|
||||
для каждого mesh с числом faces выше leaf limit query у центра первого face
|
||||
включает этот face и использует меньше кандидатов, чем полный mesh.
|
||||
|
||||
### Маршрут
|
||||
|
||||
После определения начальной и целевой областей маршрут строится по графу
|
||||
|
||||
Reference in New Issue
Block a user