From 25f8e0782abfbfef449a187ccb84927926c76a5d Mon Sep 17 00:00:00 2001 From: Nathan Vegdahl Date: Tue, 8 Mar 2016 21:57:51 -0800 Subject: [PATCH] Added Assembly and Scene types. This is in preparation for real scene data, as parsed from real psy files. Exciting! --- src/assembly.rs | 45 ++++++++++++++++++++++++++++++++++++ src/main.rs | 2 ++ src/scene.rs | 11 +++++++++ src/surface/mod.rs | 5 +++- src/surface/triangle_mesh.rs | 1 + 5 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 src/assembly.rs create mode 100644 src/scene.rs 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)>,