Welt-Texturen aus der .glb statt aus assets/textures/

Der Loader zieht jetzt die baseColorTexture jedes Materials aus dem
BIN-Chunk und dekodiert sie (PNG, via png-Crate) → model::Texture mit
Pixeln. Die Namenskonvention "Materialname = Dateiname" und der
assets/textures/-Pfad für Welt-Texturen entfallen; assets/textures/
bleibt nur noch für UI/Fonts/Platzhalter.

- engine::image: neuer, geteilter RGBA8-Image-Typ (aus tga.rs gezogen)
  plus PNG-Decoder. tga.rs liefert weiter denselben Typ.
- gltf: material -> texture -> image -> bufferView auflösen, Bild aus
  BIN dekodieren; fehlt ein Glied, bleibt image None (Platzhalter).
  KHR_texture_transform (Blenders Mapping-Node) wird beim Laden in die
  UVs eingebacken.
- model::Model: materials: Vec<String> -> textures: Vec<Texture>.
- render: die Pixel je Schlüssel aus den Modellen sammeln (erstes
  Vorkommen gewinnt, Schlüssel ohne Bild -> Platzhalter).

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_0196AM4UyAJEXVtPvp5DdKr8
This commit is contained in:
irrlicht
2026-09-02 00:29:46 +02:00
co-authored by Claude Sonnet 5
parent 937fbd6ede
commit fc3494466e
19 changed files with 495 additions and 90 deletions
+6 -3
View File
@@ -14,9 +14,11 @@
//! so wie story_ctrl Tags zurückgibt, statt selbst `signals::dispatch` zu
//! rufen.
//!
//! `gltf`, `tga` und `wav` sind reine Decoder (Bytes → owned Daten); `gltf`
//! ist DER 3D-Pfad und produziert das `model::Model`, den Vertrag zwischen
//! Loader und seinen Konsumenten (collision, trigger, audio, render::props).
//! `gltf`, `tga`, `image` und `wav` sind reine Decoder (Bytes → owned Daten);
//! `gltf` ist DER 3D-Pfad und produziert das `model::Model`, den Vertrag
//! zwischen Loader und seinen Konsumenten (collision, trigger, audio,
//! render::props) — samt der Welt-Texturen, die als PNG in der `.glb` liegen
//! (dekodiert über `image`, das den RGBA8-`Image`-Typ auch für `tga` stellt).
//! `audio` ist die Emitter-Logik zum Frontend-Treiber render::audio, `player`
//! die First-Person-Physik auf der Welt aus `collision`. Post-Effekte kennt
//! der Kern nur als `game::Action::SetPost` — die Kette lebt in render::post.
@@ -26,6 +28,7 @@ pub mod audio;
pub mod collision;
pub mod game;
pub mod gltf;
pub mod image;
pub mod ink;
pub mod kv;
pub mod model;