Engine-3D: Kamera-Presets + Weiss-Modus im render3d-Viewport

Der Engine-3D-Viewport (render3d/wgpu) war reines Ansehen (Orbit/Zoom). Jetzt:

- Kamera-Presets als Overlay: Top/Unten/Vorne/Hinten/Links/Rechts/Iso.
  Richtungen exakt wie der three.js-Pfad (applyView3d); framen die aktuelle
  Modell-Bounding-Box (fitTargetDist) und springen auf den Preset-Winkel,
  danach Orbit/Pan/Zoom weiter frei. Rein JS.
- Render-Modus Schattiert/Weiss: mode-Uniform in Globals (WGSL/Rust),
  Weiss = beleuchtetes Clay-Grau; wasm-Binding set_render_mode_white,
  durchgereicht via useWasm3dRenderer.
- Overlay-CSS self-contained (wasm3dOverlay.css), Theme-aware.

three.js unangetastet. Auswahl/Grips/Zeichnen + Wireframe/HLR bewusst noch
offen (naechste Scheibe).
This commit is contained in:
2026-07-03 20:56:56 +02:00
parent 581ddccf1a
commit b028fc6b31
6 changed files with 276 additions and 13 deletions
+17 -1
View File
@@ -37,6 +37,7 @@ export interface Camera3d {
/** Minimal-Typ des WASM-Exports (das echte .d.ts entsteht erst mit `build:engine3d`). */
interface WebModelRendererLike {
set_model(json: string): void;
set_render_mode_white(white: boolean): void;
set_camera(
eyeX: number,
eyeY: number,
@@ -128,6 +129,21 @@ export function useWasm3dRenderer(
}
}, []);
/**
* Darstellungsart umschalten: `true` = weisses Clay-Material (beleuchtet,
* ohne Bauteil-Farben), `false` = normale Material-/Vertexfarbe (shaded,
* Default). Wirkt erst beim nächsten `render`.
*/
const setWhiteMode = useCallback((white: boolean) => {
const r = rendererRef.current;
if (!r) return;
try {
r.set_render_mode_white(white);
} catch (e) {
console.warn("render3d set_render_mode_white fehlgeschlagen:", e);
}
}, []);
/** Einen Frame mit der gegebenen Kamera zeichnen (Canvas-Größe + DPR abgleichen). */
const render = useCallback(
(cam: Camera3d) => {
@@ -166,5 +182,5 @@ export function useWasm3dRenderer(
[canvasRef],
);
return { render, updateModel, ready, failed };
return { render, updateModel, setWhiteMode, ready, failed };
}