Use LOD0 for terrain queries and rendering
Docs Deploy / Build and Deploy MkDocs (push) Successful in 1m39s
Docs Deploy / Build and Deploy MkDocs (push) Successful in 1m39s
This commit is contained in:
5 files changed
+649
-91
No files matched your search
@@ -930,6 +930,31 @@ sun-ray queries поэтому используют исходные коорд
|
||||
Эти два указателя нельзя подменять друг другом. Формулы камеры и размещения
|
||||
реализованы и проверяются в `fparkan-render`.
|
||||
|
||||
## LOD ландшафта
|
||||
|
||||
У `Land.msh` список slot-ссылок terrain хранится в 38-байтовых записях
|
||||
Node38, а диапазоны граней — в 68-байтовых Slot68. В текущем runtime первые
|
||||
две ссылки Node38 выбирают соответственно LOD0 и LOD1; каждая запись слота
|
||||
задаёт начало и число граней в исходном массиве `TerrainFace28`. Все грани
|
||||
проверяются на единственное назначение, а выходящий за массив, повторный или
|
||||
неподдерживаемый диапазон считается ошибкой загрузки.
|
||||
|
||||
Первый рендер карты, terrain-запросы высоты и пересечения, receiver-ы теней и
|
||||
обрезка контуром зданий используют только LOD0. Отбор сохраняет порядок
|
||||
исходных граней, а контурный проход отдельно переводит индекс спроецированной
|
||||
грани обратно в исходный. LOD1 пока не подставляется по расстоянию: такой
|
||||
переход не реализован.
|
||||
|
||||
```rust
|
||||
let assignments = mesh.face_lod_assignments()?;
|
||||
for (face, assignment) in mesh.faces.iter().zip(assignments.iter()) {
|
||||
if assignment.lod != TerrainLod::Lod0 {
|
||||
continue;
|
||||
}
|
||||
// Build terrain query geometry from this source face.
|
||||
}
|
||||
```
|
||||
|
||||
## Материалы ландшафта
|
||||
|
||||
Рядом с `Land.msh` лежат `Land1.wea` и `Land2.wea`. Старший байт
|
||||
|
||||
Reference in new issue
Block a user