diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/main.rs | 36 |
1 files changed, 33 insertions, 3 deletions
diff --git a/src/main.rs b/src/main.rs index 1d0d33a..85c9042 100644 --- a/src/main.rs +++ b/src/main.rs @@ -16,12 +16,13 @@ use engine::file_format::wavefront::mtl::parse as parse_mtl; use engine::file_format::wavefront::obj::parse as parse_obj; use engine::input::Extension as InputExtension; use engine::lighting::{AttenuationParams, GlobalLight, PointLight}; -use engine::material::{Builder as MaterialBuilder, Flags as MaterialFlags}; +use engine::material::{Builder as MaterialBuilder, Flags as MaterialFlags, Material}; use engine::mesh::cube::{ create as cube_mesh_create, CreationSpec as CubeMeshCreationSpec, }; use engine::renderer::opengl::Extension as OpenglRendererExtension; +use engine::texture::Texture; use engine::transform::Position; use engine::vector::Vec3; use engine::window::{ @@ -69,14 +70,43 @@ fn main() -> Result<(), Box<dyn Error>> let teapot_mats = teapot_obj.read_and_parse_material_libs(parse_mtl)?; - let teapot_mat = teapot_mats + let teapot_named_mat = teapot_mats .into_iter() .find(|mat| Some(&mat.name) == teapot_mat_name) .ok_or("Teapot material was not found")?; + let mut teapot_mat_builder = Material::builder() + .ambient(teapot_named_mat.ambient) + .diffuse(teapot_named_mat.diffuse) + .specular(teapot_named_mat.specular); + + if let Some(ambient_map) = teapot_named_mat.ambient_map { + let texture = Texture::open(&ambient_map.path).unwrap(); + + teapot_mat_builder = teapot_mat_builder + .ambient_map(texture.id()) + .texture(texture); + } + + if let Some(diffuse_map) = teapot_named_mat.diffuse_map { + let texture = Texture::open(&diffuse_map.path).unwrap(); + + teapot_mat_builder = teapot_mat_builder + .diffuse_map(texture.id()) + .texture(texture); + } + + if let Some(specular_map) = teapot_named_mat.specular_map { + let texture = Texture::open(&specular_map.path).unwrap(); + + teapot_mat_builder = teapot_mat_builder + .specular_map(texture.id()) + .texture(texture); + } + engine.spawn(( teapot_obj.to_mesh()?, - teapot_mat.material, + teapot_mat_builder.build(), Position::from(Vec3 { x: 1.6, y: 0.0, z: 0.0 }), )); |