Nordstern-3D: View-Styles wireframe + hidden-line + schönere Schattierung

- Neue set_render_style(style)-Methode: shaded/white/wireframe/hidden
  (textured fällt vorerst auf shaded zurück, bis die Textur-Pipeline
  steht). Voll durchverdrahtet vom TopBar-Darstellungs-Dropdown zum
  Nordstern-Viewport (setRenderStyle statt nur setWhiteMode).
- Feature-Edge-Extraktion (edges.rs): Kanten aus dem Mesh, dedupliziert
  + Crease-Erkennung (nur Silhouette/Knickkanten, keine Triangulierungs-
  Diagonalen) → sauberes Architektur-Drahtgitter. Reuse der Grid-
  LineList-Pipeline.
- wireframe = nur Kanten; hidden = flach-weisse Flächen (Depth-Bias) +
  sichtbare Kanten obenauf (klassischer Hidden-Line-Look).
- Grundschattierung: dezentes Gegenlicht (Fill-Light), damit abgewandte
  Flächen nicht mehr in Schwarz absaufen.
This commit is contained in:
2026-07-04 06:05:11 +02:00
parent 85a721f03b
commit 6ef57b6b6b
7 changed files with 540 additions and 87 deletions
+13 -8
View File
@@ -37,7 +37,10 @@ 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;
/** Darstellungsart setzen — `style` ∈ "shaded"|"white"|"wireframe"|"hidden"|
* "textured" (deckt die volle `RenderMode`-Union der Oberleiste ab;
* "textured" faellt engine-seitig vorerst auf "shaded" zurueck). */
set_render_style(style: string): 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
@@ -142,17 +145,19 @@ 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`.
* Darstellungsart umschalten — reicht die volle `RenderMode`-Union der
* Oberleiste ("shaded"/"white"/"textured"/"wireframe"/"hidden") an Rust
* durch (`web::set_render_style`); die Engine entscheidet je Stil, wie
* gezeichnet wird ("textured" faellt dort vorerst auf "shaded" zurueck).
* Wirkt erst beim nächsten `render`.
*/
const setWhiteMode = useCallback((white: boolean) => {
const setRenderStyle = useCallback((style: string) => {
const r = rendererRef.current;
if (!r) return;
try {
r.set_render_mode_white(white);
r.set_render_style(style);
} catch (e) {
console.warn("render3d set_render_mode_white fehlgeschlagen:", e);
console.warn("render3d set_render_style fehlgeschlagen:", e);
}
}, []);
@@ -242,7 +247,7 @@ export function useWasm3dRenderer(
return {
render,
updateModel,
setWhiteMode,
setRenderStyle,
applyViewPreset,
setGroundGrid,
ready,