diff --git a/src/assembly.rs b/src/assembly.rs new file mode 100644 index 0000000..60b4b94 --- /dev/null +++ b/src/assembly.rs @@ -0,0 +1,45 @@ +use std::collections::HashMap; + +use math::Matrix4x4; +use bvh::BVH; +use surface::Surface; + + +#[derive(Debug)] +pub struct Assembly { + // Instance list + instances: Vec, + xforms: Vec, + + // Object list + objects: Vec, + object_map: HashMap, // map Name -> Index + + // Assembly list + assemblies: Vec, + assembly_map: HashMap, // map Name -> Index + + // Object accel + object_accel: BVH, +} + + +#[derive(Debug)] +pub enum Object { + Surface(Box), +} + + +#[derive(Debug, Copy, Clone)] +enum Instance { + Object { + data_index: usize, + transform_indices: (usize, usize), + shader_index: usize, + }, + + Assembly { + data_index: usize, + transform_indices: (usize, usize), + }, +} diff --git a/src/main.rs b/src/main.rs index 075f708..31da264 100644 --- a/src/main.rs +++ b/src/main.rs @@ -14,6 +14,8 @@ mod image; mod triangle; mod surface; mod bvh; +mod scene; +mod assembly; mod halton; use std::mem; diff --git a/src/scene.rs b/src/scene.rs new file mode 100644 index 0000000..1e748f7 --- /dev/null +++ b/src/scene.rs @@ -0,0 +1,11 @@ +use camera::Camera; +use assembly::Assembly; + + +#[derive(Debug)] +pub struct Scene { + name: String, + background_color: (f32, f32, f32), + camera: Camera, + root: Assembly, +} diff --git a/src/surface/mod.rs b/src/surface/mod.rs index 78c04e4..f38e5e7 100644 --- a/src/surface/mod.rs +++ b/src/surface/mod.rs @@ -1,11 +1,14 @@ #![allow(dead_code)] +use std::fmt::Debug; + pub mod triangle_mesh; use ray::Ray; use math::{Point, Normal, Matrix4x4}; +#[derive(Debug)] pub enum SurfaceIntersection { Miss, Occlude, @@ -18,6 +21,6 @@ pub enum SurfaceIntersection { }, } -pub trait Surface { +pub trait Surface: Debug { fn intersect_rays(&self, rays: &mut [Ray], isects: &mut [SurfaceIntersection]); } diff --git a/src/surface/triangle_mesh.rs b/src/surface/triangle_mesh.rs index 80269dc..7e8c6f2 100644 --- a/src/surface/triangle_mesh.rs +++ b/src/surface/triangle_mesh.rs @@ -9,6 +9,7 @@ use bvh::BVH; use super::{Surface, SurfaceIntersection}; +#[derive(Debug)] pub struct TriangleMesh { time_samples: usize, geo: Vec<(Point, Point, Point)>,