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:
@@ -6,12 +6,13 @@
|
||||
// INTEGRATIONS-SPIKE (Umfang bewusst schmal): Massenmodell (Wände mit Öffnungs-
|
||||
// Teilquadern + Deckenplatten, alle Geschosse gestapelt) + Orbit-Navigation +
|
||||
// Kamera-Presets (`view3d`, von der Oberleiste getrieben — s. u.) + Darstellungs-
|
||||
// art (shaded/white, `renderMode`, ebenfalls Oberleiste) + ein-/ausblendbares
|
||||
// Boden-Referenzraster (`gridVisible`/`groundElevation`, Overlay-Umschalter im
|
||||
// Viewport selbst). Auswahl/Raycast, Griffe/Zeichnen sowie die übrigen
|
||||
// Darstellungsarten der three.js-Sicht (texturiert/Drahtgitter/Kanten, HLR)
|
||||
// folgen später — bis dahin gilt: RECHTS unterdrückt weiterhin nur das
|
||||
// Browser-Menü (kein Kontextmenü im Engine-Pfad).
|
||||
// art (volle `renderMode`-Union der Oberleiste — shaded/white/textured/
|
||||
// wireframe/hidden — via `set_render_style` in Rust; "textured" faellt dort
|
||||
// vorerst auf "shaded" zurueck) + ein-/ausblendbares Boden-Referenzraster
|
||||
// (`gridVisible`/`groundElevation`, Overlay-Umschalter im Viewport selbst).
|
||||
// Auswahl/Raycast sowie Griffe/Zeichnen der three.js-Sicht folgen später —
|
||||
// bis dahin gilt: RECHTS unterdrückt weiterhin nur das Browser-Menü (kein
|
||||
// Kontextmenü im Engine-Pfad).
|
||||
//
|
||||
// KAMERA-PRESETS: `view3d`/`renderMode` kommen als Props von der Oberleiste
|
||||
// (TopBar → App.tsx → Viewport3D-Umschalter, dieselbe Quelle wie die three.js-
|
||||
@@ -170,9 +171,8 @@ export function Wasm3DViewport({
|
||||
project: Project;
|
||||
/** Kanonischer Blickwinkel (Oberleiste) — s. Datei-Kommentar. */
|
||||
view3d?: View3d;
|
||||
/** Darstellungsart (Oberleiste): nur `shaded`/`white` wirken hier (die
|
||||
* übrigen Modi der three.js-Sicht sind im Engine-Pfad noch nicht gebaut,
|
||||
* s. Datei-Kommentar) — alles ausser `white` fällt auf shaded zurück. */
|
||||
/** Darstellungsart (Oberleiste) — alle fünf Werte wirken hier, s.
|
||||
* Datei-Kommentar. */
|
||||
renderMode?: RenderMode;
|
||||
/** Boden-Referenzraster sichtbar? Umgeschaltet über den Overlay-Button unten
|
||||
* rechts im Viewport (`onToggleGrid`) — Single Source of Truth ist der
|
||||
@@ -188,7 +188,7 @@ export function Wasm3DViewport({
|
||||
const {
|
||||
render,
|
||||
updateModel,
|
||||
setWhiteMode,
|
||||
setRenderStyle,
|
||||
applyViewPreset,
|
||||
setGroundGrid,
|
||||
ready,
|
||||
@@ -229,14 +229,14 @@ export function Wasm3DViewport({
|
||||
redrawRef.current();
|
||||
}, [ready, view3d, applyViewPreset, render]);
|
||||
|
||||
// Darstellungsart (shaded/weiss) an den Renderer weiterreichen, sobald sie
|
||||
// wechselt oder der Renderer bereit wird — dann mit der aktuell aktiven
|
||||
// Kamera (Praeset ODER Orbit) neu zeichnen.
|
||||
// Darstellungsart (volle RenderMode-Union) an den Renderer weiterreichen,
|
||||
// sobald sie wechselt oder der Renderer bereit wird — dann mit der aktuell
|
||||
// aktiven Kamera (Praeset ODER Orbit) neu zeichnen.
|
||||
useEffect(() => {
|
||||
if (!ready) return;
|
||||
setWhiteMode(renderMode === "white");
|
||||
setRenderStyle(renderMode);
|
||||
redrawRef.current();
|
||||
}, [ready, renderMode, setWhiteMode]);
|
||||
}, [ready, renderMode, setRenderStyle]);
|
||||
|
||||
// Boden-Referenzraster: bei Bereitschaft oder Wechsel von Sichtbarkeit/
|
||||
// Geschoss-Hoehe neu setzen + zeichnen. Fixe Ausdehnung/Abstand (40 m /
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user