summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHampusM <hampus@hampusmat.com>2025-05-24 19:45:19 +0200
committerHampusM <hampus@hampusmat.com>2025-05-24 19:45:19 +0200
commitee4ba449f7d25b275738d382cbd3a06ecfcd599a (patch)
treed187bf7b39a5cd21509965fa1196d6015723ae01
parent66799c1a44d1f4871a42547f1ac3e2dde49d364c (diff)
fix: build Material from mtl NamedMaterial
-rw-r--r--src/main.rs36
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 }),
));