Nordstern-3D: Boden-Referenzraster + bessere Kamera-Steuerung

- Boden-Grid-Fläche auf y = baseElevation des aktiven Geschosses,
  ein-/ausschaltbar (Overlay-Button im Viewport, State in viewSlice
  grid3dVisible). Eigene LineList-Pipeline in der Engine (grid.rs,
  GRID_WGSL, geteilte View-Projection/Depth mit der Mesh-Pipeline),
  neue set_ground_grid(visible, elevation, extent, spacing)-Methode.
  Minor-Linien dezent, jede 5. als Major betont.
- Kamera-Steuerung überarbeitet (vorher nur Mitte=Orbit, Pan auf
  Shift+Mitte versteckt): Links=Orbit, Mitte/Rechts=Pan (bewegen),
  Rad=Zoom zum Cursor. Laptop-freundlich, konsistent mit der
  2D-Plan-Navigation (dort Mitte=Pan).
This commit is contained in:
2026-07-04 05:54:16 +02:00
parent d0b94a75ec
commit d4065c5a41
12 changed files with 567 additions and 21 deletions
+19
View File
@@ -327,6 +327,25 @@ impl WebModelRenderer {
self.renderer.set_white_mode(white);
}
/// Schaltet das Referenz-Bodengitter (grid.rs) ein/aus und setzt seine
/// Parameter. `elevation_m` = Hoehe der XZ-Gitterebene (world-Meter, i. d. R.
/// die z=0-Ebene des aktiven Geschosses); `extent_m` = quadratische Kantenlaenge
/// (auf ein Vielfaches von `spacing_m` gerundet); `spacing_m` = Linienabstand.
/// Das Gitter ist zentriert um den Welt-Ursprung (x=0, z=0). Wirkt erst beim
/// naechsten `render`. Default ohne Aufruf: unsichtbar (bestehende Aufrufer
/// bleiben unveraendert). Jede 5. Linie (inkl. Mittelachse) ist eine Major-Linie.
pub fn set_ground_grid(
&mut self,
visible: bool,
elevation_m: f32,
extent_m: f32,
spacing_m: f32,
) -> Result<(), JsValue> {
self.renderer
.set_ground_grid(&self.device, visible, elevation_m, extent_m, spacing_m);
Ok(())
}
/// Surface an eine neue Pixelgroesse anpassen (DPR beachtet der Aufrufer).
pub fn resize(&mut self, width: u32, height: u32) {
let (w, h) = (width.max(1), height.max(1));