1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
//! Pure-Rust 3D scene + mesh typed model.
//!
//! This crate is the foundation for the OxideAV 3D format ecosystem
//! (`oxideav-stl`, `oxideav-obj`, `oxideav-gltf`, future
//! `oxideav-fbx` / `oxideav-usd`). It defines a single PBR-aligned
//! data model that every format crate can decode into and encode
//! from, and it exposes [`Mesh3DDecoder`] / [`Mesh3DEncoder`] traits
//! plus a [`Mesh3DRegistry`] that mirrors the codec-registry pattern
//! from `oxideav-core`.
//!
//! The model is aligned with **glTF 2.0** as the spec-stable common
//! denominator (Khronos KHR-public spec, royalty-free). This means:
//!
//! * Right-handed coordinates, Y-up, -Z forward as the canonical
//! default. Files coming from Z-up formats (STL/OBJ Wavefront) set
//! [`Scene3D::up_axis`] to [`Axis::PosZ`] without any geometry
//! re-orientation; downstream renderers honour the metadata.
//! * Quaternions are stored xyzw to match glTF.
//! * Tangents carry handedness in `w` (`±1.0`).
//! * Materials are metallic-roughness PBR with `base_color`,
//! `metallic`, `roughness`, `normal`, `occlusion`, and `emissive`
//! slots (see [`Material`]).
//!
//! Round 1 ships the type model + the trait surface only. No format
//! support — that lands in dedicated sibling crates.
//!
//! Round 2 adds:
//!
//! * [`AssetSource`] trait — lazy reference to a binary asset
//! ([`Texture`] or [`AudioSource`]) so massive scenes (USDZ
//! archives in the hundreds of MB) don't have to be materialised
//! in RAM. Supports optional `raw_storage()` pass-through so a
//! USDZ → USDZ converter can copy deflated payloads verbatim
//! instead of inflate + re-deflate.
//! * `Audio*` types — [`AudioSource`], [`AudioEmitter`],
//! [`SpatialAudio`], [`AuralMode`], [`DistanceModel`]. Aligned
//! with USD `UsdMediaSpatialAudio` + glTF `KHR_audio_emitter`.
//! * [`ImageData::Source`] replaces the round-1
//! `ImageData::Encoded { mime, bytes }` variant. Migration: wrap
//! bytes in [`InMemoryAsset`], `Arc::new()` it, pass into
//! `ImageData::Source(...)` (or keep using the
//! [`Texture::from_encoded`] convenience constructor — the
//! signature is unchanged).
//!
//! ## Standalone build
//!
//! `oxideav-core` is gated behind the default-on `registry` cargo
//! feature. Drop the framework dependency entirely with:
//!
//! ```toml
//! oxideav-mesh3d = { version = "0.0", default-features = false }
//! ```
//!
//! The typed model and trait definitions remain available — only the
//! [`Mesh3DRegistry`] glue is feature-gated, and the [`Error`] alias
//! resolves to a crate-local enum instead of `oxideav_core::Error`.
pub use ;
pub use ;
pub use ;
pub use Camera;
pub use Mesh3DDecoder;
pub use Mesh3DEncoder;
pub use ;
pub use Light;
pub use ;
pub use ;
pub use Mesh3DRegistry;
pub use ;
pub use ;
pub use ;