Nordstern: Geo-Kontext-Meshes (Terrain/Import) rendern

Bisher zeigte nur three.js importierte Gebaeude/DXF-Meshes und das
Terrain-TIN (Project.context). Neuer MeshInput-Typ + Kontext-Mesh-Pfad
in render3d (Flat-Normalen, doppelseitig gegen unbekanntes Winding),
projectToModel3d speist project.context jetzt in beide Renderer
(nativ + WASM) ein. Nebenbei: fehlendes layers-Feld in demo_walls()
behoben, das den native3d-Feature-Build zuvor schon brach.
This commit is contained in:
2026-07-04 04:38:00 +02:00
parent 19d002d403
commit 9f6d4e8858
7 changed files with 339 additions and 19 deletions
+6 -2
View File
@@ -32,7 +32,7 @@ use web_sys::HtmlCanvasElement;
use crate::gpu::Renderer;
use crate::math::preset_camera;
use crate::section::{cut_section, SectionPlane};
use crate::types::{Camera, CameraPreset, Projection, SlabInput, WallInput};
use crate::types::{Camera, CameraPreset, MeshInput, Projection, SlabInput, WallInput};
/// JSON-Eingabe des Modells: Waende (bereits in Teilquader zerlegt, siehe
/// `projectToWalls3d`) + Deckenplatten. `slabs` optional (leeres Modell ohne
@@ -42,6 +42,10 @@ struct ModelInput {
walls: Vec<WallInput>,
#[serde(default)]
slabs: Vec<SlabInput>,
/// Rohe Kontext-Meshes (Terrain/importierte Volumen). `#[serde(default)]`
/// haelt aeltere Payloads ohne `meshes` gueltig.
#[serde(default)]
meshes: Vec<MeshInput>,
}
/// Berechnet einen Schnitt/eine Ansicht (`section::cut_section`) gegen das Modell
@@ -232,7 +236,7 @@ impl WebModelRenderer {
.map_err(|e| JsValue::from_str(&format!("Modell parsen: {e}")))?;
self.bounds = model_bounds(&model.walls, &model.slabs);
self.renderer
.upload_model(&self.device, &model.walls, &model.slabs);
.upload_model(&self.device, &model.walls, &model.slabs, &model.meshes);
Ok(())
}