diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/main.rs | 30 |
1 files changed, 22 insertions, 8 deletions
diff --git a/src/main.rs b/src/main.rs index 1ce78ed..662fc05 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,7 +1,7 @@ pub mod spatial; use anyhow::Result; -use glam::{Affine3A, DAffine3, DVec3, Vec3}; +use glam::{Affine3A, DAffine3, DVec3}; use indicatif::ProgressIterator; use log::{debug, info}; use osm_pbf_reader::{Blobs, data::primitives::Primitive}; @@ -68,7 +68,7 @@ fn main() -> Result<()> { let store = ResourceStore::new_memory(); info!("Exporting resources..."); - let (_, root) = export_level(&tree, &store)?; + let (_, root) = export_level(&tree, &store, &mut Vec::new())?; let entry = Some(store.set(&RespackEntry { c_spatial_index: vec![root], ..Default::default() @@ -81,26 +81,40 @@ fn main() -> Result<()> { Ok(()) } -fn export_level(node: &Octtree, store: &ResourceStore) -> Result<(AABB, Resource<SpatialIndex>)> { +fn export_level( + node: &Octtree, + store: &ResourceStore, + important_features: &mut Vec<DVec3>, +) -> Result<(AABB, Resource<SpatialIndex>)> { + let mut lod_features = Vec::new(); let child = node .children .iter() .flat_map(|e| e.as_slice()) .flatten() .flatten() - .map(|o| export_level(o, store)) + .map(|o| export_level(o, store, &mut lod_features)) .collect::<Result<Vec<_>>>()?; - let prefab = if node.elems.is_empty() { - None - } else { + let prefab = { + let points = if node.elems.is_empty() { + lod_features + } else { + node.elems.iter().map(|(e, _id)| *e).collect() + }; + let local_origin = node.center; let mut g = GraphicsPart::default(); use weareshared::graphics::GraphicsCommand::*; g.push(StrokeWidth(0.001)); g.push(Stroke(5)); - g.push(Point(Vec3::ZERO)); + for (i, p) in points.into_iter().enumerate() { + g.push(Point((p - local_origin).as_vec3())); + if i % 8 == 0 { + important_features.push(p); + } + } Some(store.set(&Prefab { transform: Some(DAffine3::from_translation(local_origin)), |