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
+39 -1
View File
@@ -39,6 +39,17 @@ interface WebModelRendererLike {
set_model(json: string): void;
set_render_mode_white(white: boolean): void;
set_view_preset(preset: string): void;
/** Boden-Referenzraster in der Welt-XZ-Ebene ein-/ausblenden (Rust-seitig,
* `web::set_ground_grid`). `visible=false` zeichnet kein Raster; sonst ein
* Quadrat der Kantenlaenge `extent_m` (zentriert um den Ursprung, XZ) auf
* Hoehe `elevation_m` (world-Y) mit Linienabstand `spacing_m`. Wirkt erst
* beim naechsten `render`. */
set_ground_grid(
visible: boolean,
elevation_m: number,
extent_m: number,
spacing_m: number,
): void;
set_camera(
eyeX: number,
eyeY: number,
@@ -145,6 +156,25 @@ export function useWasm3dRenderer(
}
}, []);
/**
* Boden-Referenzraster ein-/ausblenden (Overlay-Umschalter im Viewport,
* s. Wasm3DViewport.tsx). `elevationM` = OKFF des aktiven Geschosses
* (`baseElevation`), `extentM`/`spacingM` = Kantenlaenge/Linienabstand des
* Quadrats in Metern. Wirkt erst beim naechsten `render`.
*/
const setGroundGrid = useCallback(
(visible: boolean, elevationM: number, extentM: number, spacingM: number) => {
const r = rendererRef.current;
if (!r) return;
try {
r.set_ground_grid(visible, elevationM, extentM, spacingM);
} catch (e) {
console.warn("render3d set_ground_grid fehlgeschlagen:", e);
}
},
[],
);
/**
* Kamera-Praeset anwenden (`front`/`top`/`side`/`iso`/`perspective`, wie
* `View3d` in TopBar.tsx). Delegiert die formatfuellende Ziel-/Distanz-
@@ -209,5 +239,13 @@ export function useWasm3dRenderer(
[canvasRef],
);
return { render, updateModel, setWhiteMode, applyViewPreset, ready, failed };
return {
render,
updateModel,
setWhiteMode,
applyViewPreset,
setGroundGrid,
ready,
failed,
};
}