2D-Plan-Renderer auf WebGL2 (GPU) + akkumulierter Funktionsstand

Neuer GPU-Renderer fuer den Grundriss (src/plan/glPlan/): Earcut-Tessellierung
(konkav-faehig), gehrte Linienzuege (Miter), echte Papier-mm-Strichbreiten im
Massstab (repliziert den SVG-printStrokeVb-Pfad), Hybrid mit scharfem SVG-Text-
Overlay. GPU ist der Standardpfad; der SVG-Renderer bleibt automatischer Fallback,
falls WebGL2/Shader nicht verfuegbar sind. Imperativer Pan (rAF + CSS-transform)
fuer fluessige Interaktion ohne React-Re-Render je Frame.

Enthaelt zudem den bisher nicht committeten Arbeitsstand des Browser-BIM
(Oeffnungen, Treppen, Raeume, Decken, DXF-Export, Materialbibliothek, Kontext-
Import, Tauri-Compute-Boundary-PoC).
This commit is contained in:
2026-07-02 00:12:39 +02:00
parent cfe5249440
commit 3d2d4d6321
184 changed files with 29421 additions and 669 deletions
+171
View File
@@ -0,0 +1,171 @@
// Auto-generated built-in material library (ambientCG, CC0 1.0).
// Static asset paths under /public; loadable directly via three.js TextureLoader.
// Source data mirrors public/assets/materials/manifest.json.
export type MaterialMapKind =
| 'color'
| 'normal'
| 'roughness'
| 'metalness'
| 'displacement'
| 'ao';
export interface MaterialAsset {
/** ambientCG asset id, e.g. 'Concrete048'. */
id: string;
/** Localized display name (German). */
name: string;
/** ambientCG category key, e.g. 'Concrete'. */
category: string;
/** Absolute public paths to the available texture maps. */
maps: Partial<Record<MaterialMapKind, string>>;
}
export const MATERIAL_LIBRARY_SOURCE = "ambientCG (ambientcg.com)";
export const MATERIAL_LIBRARY_LICENSE = "CC0 1.0 Universal (Public Domain)";
export const MATERIAL_LIBRARY_RESOLUTION = "1K";
export const MATERIAL_LIBRARY: MaterialAsset[] = [
{
id: "Concrete048",
name: "Beton",
category: "Concrete",
maps: {
color: "/assets/materials/Concrete048/color.jpg",
normal: "/assets/materials/Concrete048/normal.jpg",
roughness: "/assets/materials/Concrete048/roughness.jpg",
displacement: "/assets/materials/Concrete048/displacement.jpg",
ao: "/assets/materials/Concrete048/ao.jpg",
},
},
{
id: "Plaster001",
name: "Putz/Stuck",
category: "Plaster",
maps: {
color: "/assets/materials/Plaster001/color.jpg",
normal: "/assets/materials/Plaster001/normal.jpg",
roughness: "/assets/materials/Plaster001/roughness.jpg",
displacement: "/assets/materials/Plaster001/displacement.jpg",
},
},
{
id: "Wood095",
name: "Holz-Diele",
category: "Wood",
maps: {
color: "/assets/materials/Wood095/color.jpg",
normal: "/assets/materials/Wood095/normal.jpg",
roughness: "/assets/materials/Wood095/roughness.jpg",
displacement: "/assets/materials/Wood095/displacement.jpg",
},
},
{
id: "WoodFloor051",
name: "Holz-Parkett",
category: "WoodFloor",
maps: {
color: "/assets/materials/WoodFloor051/color.jpg",
normal: "/assets/materials/WoodFloor051/normal.jpg",
roughness: "/assets/materials/WoodFloor051/roughness.jpg",
displacement: "/assets/materials/WoodFloor051/displacement.jpg",
ao: "/assets/materials/WoodFloor051/ao.jpg",
},
},
{
id: "Bricks104",
name: "Backstein",
category: "Bricks",
maps: {
color: "/assets/materials/Bricks104/color.jpg",
normal: "/assets/materials/Bricks104/normal.jpg",
roughness: "/assets/materials/Bricks104/roughness.jpg",
displacement: "/assets/materials/Bricks104/displacement.jpg",
ao: "/assets/materials/Bricks104/ao.jpg",
},
},
{
id: "Tiles141",
name: "Bodenfliesen",
category: "Tiles",
maps: {
color: "/assets/materials/Tiles141/color.jpg",
normal: "/assets/materials/Tiles141/normal.jpg",
roughness: "/assets/materials/Tiles141/roughness.jpg",
displacement: "/assets/materials/Tiles141/displacement.jpg",
},
},
{
id: "Marble012",
name: "Naturstein/Marmor",
category: "Marble",
maps: {
color: "/assets/materials/Marble012/color.jpg",
normal: "/assets/materials/Marble012/normal.jpg",
roughness: "/assets/materials/Marble012/roughness.jpg",
displacement: "/assets/materials/Marble012/displacement.jpg",
},
},
{
id: "PavingStones150",
name: "Pflasterstein",
category: "PavingStones",
maps: {
color: "/assets/materials/PavingStones150/color.jpg",
normal: "/assets/materials/PavingStones150/normal.jpg",
roughness: "/assets/materials/PavingStones150/roughness.jpg",
displacement: "/assets/materials/PavingStones150/displacement.jpg",
ao: "/assets/materials/PavingStones150/ao.jpg",
},
},
{
id: "Metal063",
name: "Metall",
category: "Metal",
maps: {
color: "/assets/materials/Metal063/color.jpg",
normal: "/assets/materials/Metal063/normal.jpg",
roughness: "/assets/materials/Metal063/roughness.jpg",
metalness: "/assets/materials/Metal063/metalness.jpg",
displacement: "/assets/materials/Metal063/displacement.jpg",
},
},
{
id: "Gravel043",
name: "Kies/Schotter",
category: "Gravel",
maps: {
color: "/assets/materials/Gravel043/color.jpg",
normal: "/assets/materials/Gravel043/normal.jpg",
roughness: "/assets/materials/Gravel043/roughness.jpg",
displacement: "/assets/materials/Gravel043/displacement.jpg",
ao: "/assets/materials/Gravel043/ao.jpg",
},
},
{
id: "Grass005",
name: "Gras",
category: "Grass",
maps: {
color: "/assets/materials/Grass005/color.jpg",
normal: "/assets/materials/Grass005/normal.jpg",
roughness: "/assets/materials/Grass005/roughness.jpg",
displacement: "/assets/materials/Grass005/displacement.jpg",
ao: "/assets/materials/Grass005/ao.jpg",
},
},
{
id: "Ground103",
name: "Boden",
category: "Ground",
maps: {
color: "/assets/materials/Ground103/color.jpg",
normal: "/assets/materials/Ground103/normal.jpg",
roughness: "/assets/materials/Ground103/roughness.jpg",
displacement: "/assets/materials/Ground103/displacement.jpg",
ao: "/assets/materials/Ground103/ao.jpg",
},
},
];
export default MATERIAL_LIBRARY;