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
+9
View File
@@ -35,6 +35,8 @@ struct Globals {
sky_color: [f32; 4],
ground_color: [f32; 4],
sun_color: [f32; 4],
/// x = Darstellungsart (0 = shaded/Material, 1 = weiss/Clay); siehe shaders.rs.
mode: [f32; 4],
}
impl Default for Globals {
@@ -49,6 +51,7 @@ impl Default for Globals {
ground_color: [0.30, 0.29, 0.27, 1.0],
// Directional-Sonne: warmweiss, moderat.
sun_color: [0.55, 0.53, 0.49, 1.0],
mode: [0.0, 0.0, 0.0, 0.0],
}
}
}
@@ -258,6 +261,12 @@ impl Renderer {
self.globals.sun_color = [sun[0], sun[1], sun[2], 1.0];
}
/// Darstellungsart umschalten: `true` = weisses Clay-Material (Beleuchtung
/// bleibt aktiv, siehe shaders.rs), `false` = normale Bauteil-/Vertexfarbe.
pub fn set_white_mode(&mut self, white: bool) {
self.globals.mode[0] = if white { 1.0 } else { 0.0 };
}
/// Stellt sicher, dass ein Tiefenpuffer passend zur Ziel-Groesse existiert.
fn ensure_depth(&mut self, device: &wgpu::Device, w: u32, h: u32) {
let ok = matches!(&self.depth, Some(d) if d.width == w && d.height == h);