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
+8 -1
View File
@@ -16,6 +16,7 @@
// sky_color : vec4<f32> Himmels-Ambient (rgb; von oben)
// ground_color : vec4<f32> Boden-Ambient (rgb; von unten)
// sun_color : vec4<f32> Farbe/Staerke des Directional-Lights (rgb)
// mode : vec4<f32> x = Darstellungsart (0 = shaded/Material, 1 = weiss/Clay)
//
// Vertex-Attribute: position (world), normal (world), color (Albedo).
@@ -28,6 +29,7 @@ struct Globals {
sky_color : vec4<f32>,
ground_color : vec4<f32>,
sun_color : vec4<f32>,
mode : vec4<f32>,
};
@group(0) @binding(0) var<uniform> globals : Globals;
@@ -65,7 +67,12 @@ fn fs_main(in : VsOut) -> @location(0) vec4<f32> {
// Gerichteter Lambert-Anteil (Sonne); Rueckseiten (n.l < 0) tragen nichts bei.
let diffuse = max(dot(n, l), 0.0) * globals.sun_color.rgb;
var shaded = in.color * (ambient + diffuse);
// Weiss-Modus (Clay-Look): Material-/Vertexfarbe durch ein einheitliches
// Hellgrau ersetzen, Beleuchtung (Ambient + Directional) bleibt aktiv — so
// liest sich die Volumetrie ohne Bauteil-Farben ab (Vectorworks „white").
let albedo = mix(in.color, vec3<f32>(0.82, 0.82, 0.80), globals.mode.x);
var shaded = albedo * (ambient + diffuse);
// Sanfte Kantenbetonung: senkrechte Flaechen (n.y nahe 0) minimal abdunkeln,
// damit sich Waende vom hellen Deckel/Boden abheben (ohne Postprocessing).