diff --git a/src/model/mod.rs b/src/model/mod.rs index cac51ec..4653bf8 100644 --- a/src/model/mod.rs +++ b/src/model/mod.rs @@ -136,10 +136,12 @@ impl Model { let normal_offset = self.normals.len(); let face_offset = self.faces.len(); + // Merge the elements self.vertices.append(&mut other.vertices); self.texture_coordinates.append(&mut other.texture_coordinates); self.normals.append(&mut other.normals); + // Merge the parts and faces for part in &mut other.parts { let mut new_part = Part::new(part.material_name.clone()); for face in &mut part.faces { @@ -161,6 +163,7 @@ impl Model { self.parts.push(new_part); } + // Merge the materials for (name, material) in other.materials { let entry = self.materials.entry(name); if let Entry::Occupied(_) = entry { @@ -169,6 +172,16 @@ impl Model { entry.or_insert(material); } } + + // Merge the textures + for (name, texture) in other.textures { + let entry = self.textures.entry(name); + if let Entry::Occupied(_) = entry { + // return Error; + } else { + entry.or_insert(texture); + } + } } /// Creates a model from a file. diff --git a/src/programs/viewer.rs b/src/programs/viewer.rs index bead8c7..6e45300 100644 --- a/src/programs/viewer.rs +++ b/src/programs/viewer.rs @@ -11,10 +11,7 @@ use clap::{App, Arg}; use glium::Display; use glium::glutin; -use glium::glutin::{ - EventsLoop, - WindowBuilder, -}; +use glium::glutin::{EventsLoop, WindowBuilder}; use glium::glutin::Event; use glium::glutin::WindowEvent; @@ -25,8 +22,7 @@ use model_converter::math::bounding_box::BoundingBox3; use model_converter::math::vector::Vector3; use model_converter::parser::parse; use model_converter::renderer::Renderer; -use model_converter::controls::OrbitControls; -use model_converter::controls::FirstPersonControls; +use model_converter::controls::{OrbitControls, FirstPersonControls}; use model_converter::camera::Camera; fn as_millis(duration: Duration) -> u64 {