From f51d3396f4834872daca8b023e8b773e16884c10 Mon Sep 17 00:00:00 2001 From: Bill Thiede Date: Sun, 12 Feb 2023 13:01:54 -0800 Subject: [PATCH] rtiow: tweak scenes and cleanup lint --- rtiow/renderer/src/material.rs | 8 ++++---- rtiow/renderer/src/scenes/dragon.rs | 27 ++++++-------------------- rtiow/renderer/src/scenes/stltest.rs | 22 +++++++++++---------- rtiow/renderer/src/texture/constant.rs | 2 +- 4 files changed, 23 insertions(+), 36 deletions(-) diff --git a/rtiow/renderer/src/material.rs b/rtiow/renderer/src/material.rs index 74d3add..406f4f1 100644 --- a/rtiow/renderer/src/material.rs +++ b/rtiow/renderer/src/material.rs @@ -52,7 +52,7 @@ impl Material for Box { } } -#[derive(Debug)] +#[derive(Clone, Debug)] pub struct Isotropic where T: Texture, @@ -83,7 +83,7 @@ where } } -#[derive(Debug)] +#[derive(Clone, Debug)] pub struct Lambertian where T: Texture, @@ -115,7 +115,7 @@ where } } -#[derive(Debug)] +#[derive(Clone, Debug)] pub struct Metal { albedo: Vec3, fuzzy: f32, @@ -170,7 +170,7 @@ fn schlick(cosine: f32, ref_idx: f32) -> f32 { r0 + (1. - r0) * (1. - cosine).powf(5.) } -#[derive(Debug)] +#[derive(Clone, Debug)] pub struct Dielectric { ref_idx: f32, } diff --git a/rtiow/renderer/src/scenes/dragon.rs b/rtiow/renderer/src/scenes/dragon.rs index d3286ba..ae6a71d 100644 --- a/rtiow/renderer/src/scenes/dragon.rs +++ b/rtiow/renderer/src/scenes/dragon.rs @@ -1,14 +1,10 @@ -use std::{ - io::{BufReader, Cursor}, - sync::Arc, -}; +use std::io::{BufReader, Cursor}; use stl::STL; use crate::{ bvh_triangles::BVHTriangles, camera::Camera, - cuboid::Cuboid, hitable::Hit, hitable_list::HitableList, kdtree::KDTree, @@ -17,6 +13,7 @@ use crate::{ scale::Scale, sphere::Sphere, texture::{ConstantTexture, EnvMap}, + translate::Translate, vec3::Vec3, }; @@ -46,8 +43,7 @@ pub fn new(opt: &Opt) -> Scene { let stl_cube = STL::parse( BufReader::new(Cursor::new(include_bytes!( - "../../stls/cube.stl" - //"../../stls/stanford_dragon-lowres.stl" //"../../stls/stanford_dragon.stl" + "../../stls/stanford_dragon-lowres.stl" //"../../stls/stanford_dragon.stl" ))), false, ) @@ -81,20 +77,9 @@ pub fn new(opt: &Opt) -> Scene { Lambertian::new(ConstantTexture::new(Vec3::new(1.0, 0.2, 0.2))), )), // STL Mesh - Box::new(Scale::new( - BVHTriangles::new( - &stl_cube, - Dielectric::new(1.5), - //Metal::new(Vec3::new(0.8, 0.8, 0.8), 0.2), - //Lambertian::new(ConstantTexture::new(Vec3::new(1.0, 0.2, 0.2))), - ), - 1., - //250., - )), - Box::new(Cuboid::new( - [-20., 0., 0.].into(), - [0., 20., 20.].into(), - Arc::new(Dielectric::new(1.5)), + Box::new(Translate::new( + Scale::new(BVHTriangles::new(&stl_cube, Dielectric::new(1.5)), 250.), + [0., -10., 0.], )), ]; let world: Box = if opt.use_accel { diff --git a/rtiow/renderer/src/scenes/stltest.rs b/rtiow/renderer/src/scenes/stltest.rs index 406bce2..acc4e64 100644 --- a/rtiow/renderer/src/scenes/stltest.rs +++ b/rtiow/renderer/src/scenes/stltest.rs @@ -12,7 +12,7 @@ use crate::{ hitable::Hit, hitable_list::HitableList, kdtree::KDTree, - material::{Dielectric, Lambertian}, + material::{Dielectric, Lambertian, Metal}, renderer::{Opt, Scene}, sphere::Sphere, texture::{ConstantTexture, EnvMap}, @@ -43,13 +43,20 @@ pub fn new(opt: &Opt) -> Scene { ConstantTexture::new(Vec3::new(0.4, 0.4, 0.4)) }; + let glass = Dielectric::new(1.5); + let metal = Metal::new(Vec3::new(0.8, 0.8, 0.8), 0.2); + let red = Lambertian::new(ConstantTexture::new(Vec3::new(1.0, 0.2, 0.2))); + + let box_material = glass; + let _ = glass; + let _ = metal; + let _ = red; + let stl_cube = STL::parse( BufReader::new(Cursor::new(include_bytes!("../../stls/cube.stl"))), false, ) .expect("failed to parse cube"); - let _light_size = 50.; - let _light_height = 200.; let objects: Vec> = vec![ // Light from above - white // Earth sized sphere @@ -77,16 +84,11 @@ pub fn new(opt: &Opt) -> Scene { Lambertian::new(ConstantTexture::new(Vec3::new(1.0, 0.2, 0.2))), )), // STL Mesh - Box::new(BVHTriangles::new( - &stl_cube, - Dielectric::new(1.5), - //Metal::new(Vec3::new(0.8, 0.8, 0.8), 0.2), - //Lambertian::new(ConstantTexture::new(Vec3::new(1.0, 0.2, 0.2))), - )), + Box::new(BVHTriangles::new(&stl_cube, box_material.clone())), Box::new(Cuboid::new( [-20., 0., 0.].into(), [0., 20., 20.].into(), - Arc::new(Dielectric::new(1.5)), + Arc::new(box_material), )), ]; let world: Box = if opt.use_accel { diff --git a/rtiow/renderer/src/texture/constant.rs b/rtiow/renderer/src/texture/constant.rs index 2729268..132d362 100644 --- a/rtiow/renderer/src/texture/constant.rs +++ b/rtiow/renderer/src/texture/constant.rs @@ -1,6 +1,6 @@ use crate::{texture::Texture, vec3::Vec3}; -#[derive(Debug, PartialEq)] +#[derive(Clone, Debug, PartialEq)] pub struct ConstantTexture { color: Vec3, }