Add more scenes
This commit is contained in:
parent
7d38e87f6a
commit
b11e7a7a78
8 changed files with 116 additions and 20 deletions
|
|
@ -1,8 +1,11 @@
|
|||
use crate::{
|
||||
parse_obj::ObjData,
|
||||
triangle_bvh::{BVHMaterial, Triangle, TriangleBVH},
|
||||
};
|
||||
use ray_tracing_core::{light::AreaLight, prelude::*};
|
||||
use ray_tracing_material::{diffuse::DiffuseMaterial, mirror::Mirror};
|
||||
use std::collections::HashMap;
|
||||
|
||||
use crate::triangle_bvh::{BVHMaterial, Triangle, TriangleBVH};
|
||||
use std::fmt::Debug;
|
||||
|
||||
pub struct ExampleScene<R: Rng> {
|
||||
pub scene: TriangleBVH<R>,
|
||||
|
|
@ -12,18 +15,47 @@ pub struct ExampleScene<R: Rng> {
|
|||
pub horizontal_fov: Float,
|
||||
}
|
||||
|
||||
pub fn example_scenes<R: Rng>() -> HashMap<&'static str, fn() -> ExampleScene<R>> {
|
||||
pub fn example_scenes<R: Rng + Debug>() -> HashMap<&'static str, fn() -> ExampleScene<R>> {
|
||||
let mut map: HashMap<&str, fn() -> ExampleScene<R>> = HashMap::new();
|
||||
map.insert("basic_cornel", basic_cornel::<R>);
|
||||
// map.insert("cornel2", cornel2::<R>);
|
||||
map.insert("basic_cornel", basic_cornell::<R>);
|
||||
map.insert("cornel2", cornell2::<R>);
|
||||
map
|
||||
}
|
||||
|
||||
pub fn cornel2<R: Rng>() -> ExampleScene<R> {
|
||||
todo!()
|
||||
pub fn cornell2<R: Rng + Debug>() -> ExampleScene<R> {
|
||||
let obj = ObjData::new("ray-tracing-scene/obj/cornell_box.obj").unwrap();
|
||||
|
||||
let triangles = obj
|
||||
.triangle_faces()
|
||||
.map(|t| Triangle::new(t.v, t.mat.unwrap()))
|
||||
.collect();
|
||||
|
||||
let materials = obj
|
||||
.materials()
|
||||
.iter()
|
||||
.map(|m| match m.name.as_str() {
|
||||
"white" => BVHMaterial::new_material(DiffuseMaterial::new(Color::white())),
|
||||
"light" => BVHMaterial::new_light(AreaLight::new(Color::white() * 100.0)),
|
||||
"blue" => BVHMaterial::new_material(DiffuseMaterial::new(Color::new(0.0, 0.0, 1.0))),
|
||||
"red" => BVHMaterial::new_material(DiffuseMaterial::new(Color::new(1.0, 0.0, 0.0))),
|
||||
"green" => BVHMaterial::new_material(DiffuseMaterial::new(Color::new(0.0, 1.0, 0.0))),
|
||||
"mirror" => BVHMaterial::new_material(Mirror::new(Color::white())),
|
||||
_ => unreachable!(),
|
||||
})
|
||||
.collect();
|
||||
|
||||
let scene = dbg!(TriangleBVH::new(obj.vertices, triangles, materials));
|
||||
|
||||
ExampleScene {
|
||||
scene,
|
||||
camera_pos: Pos3::new(275.0, 275.0, -800.0),
|
||||
camera_dir: Dir3::new(0.0, 0.0, 1.0),
|
||||
camera_up: Dir3::up(),
|
||||
horizontal_fov: 90.0_f32.to_radians(),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn basic_cornel<R: Rng>() -> ExampleScene<R> {
|
||||
pub fn basic_cornell<R: Rng>() -> ExampleScene<R> {
|
||||
let side_length = 1.5;
|
||||
let light_size = 0.5;
|
||||
let light_offset = 0.01;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue