Skip to main content

quantized_mesh/
lib.rs

1//! Encoder and decoder for Cesium quantized-mesh-1.0 terrain format.
2//!
3//! This crate provides encoding and decoding functionality for the
4//! quantized-mesh terrain format used by CesiumJS for efficient 3D
5//! terrain streaming.
6//!
7//! For the legacy heightmap-1.0 format see
8//! [`terrain_codec::heightmap::cesium`](https://docs.rs/terrain-codec/latest/terrain_codec/heightmap/cesium/).
9//!
10//! # References
11//!
12//! - Format specification: <https://github.com/CesiumGS/quantized-mesh>
13//!
14//! # Example
15//!
16//! ```
17//! use quantized_mesh::{
18//!     QuantizedMeshEncoder, QuantizedMeshHeader, QuantizedVertices,
19//!     EdgeIndices, TileBounds,
20//! };
21//!
22//! // Create header with tile metadata
23//! let header = QuantizedMeshHeader {
24//!     center: [0.0, 0.0, 6378137.0],
25//!     min_height: 0.0,
26//!     max_height: 100.0,
27//!     bounding_sphere_center: [0.0, 0.0, 6378137.0],
28//!     bounding_sphere_radius: 1000.0,
29//!     horizon_occlusion_point: [0.0, 0.0, 1.0],
30//! };
31//!
32//! // Create vertices (simple 2-triangle mesh)
33//! let vertices = QuantizedVertices {
34//!     u: vec![0, 32767, 0, 32767],
35//!     v: vec![0, 0, 32767, 32767],
36//!     height: vec![0, 0, 0, 0],
37//! };
38//!
39//! // Triangle indices (2 triangles)
40//! let indices = vec![0, 1, 2, 1, 3, 2];
41//!
42//! // Edge indices
43//! let edge_indices = EdgeIndices {
44//!     west: vec![0, 2],
45//!     south: vec![0, 1],
46//!     east: vec![1, 3],
47//!     north: vec![2, 3],
48//! };
49//!
50//! // Encode to quantized-mesh format
51//! let encoder = QuantizedMeshEncoder::new(header, vertices, indices, edge_indices);
52//! let data = encoder.encode();
53//! ```
54
55pub mod coords;
56mod decoding;
57mod encoding;
58mod header;
59mod types;
60
61pub use decoding::*;
62pub use encoding::*;
63pub use header::*;
64pub use types::*;