From 9235e74dfbc41895a5f8807e1ab93508268a39ea Mon Sep 17 00:00:00 2001 From: Julian T Date: Wed, 3 Feb 2021 17:54:03 +0100 Subject: Base render of surface normal, and abstract shading and tracing to the trace module --- src/trace/mod.rs | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 src/trace/mod.rs (limited to 'src/trace/mod.rs') diff --git a/src/trace/mod.rs b/src/trace/mod.rs new file mode 100644 index 0000000..90f12da --- /dev/null +++ b/src/trace/mod.rs @@ -0,0 +1,30 @@ +use crate::scene::Scene; +use crate::core::{Spectrum, Ray, Vector3f}; + +/// Simple surface normal tracer +/// +/// This ray tracer bases color values on the hit surface normals +pub struct NormTracer {} + +/// Alias for chosen trace implementation. +/// +/// This is swiched at compile time to save alot of time. +pub type Tracer = NormTracer; + +impl NormTracer { + pub fn new() -> NormTracer { + NormTracer {} + } + + pub fn trace(&self, scn: &Scene, ray: &Ray) -> Spectrum { + // Trace ray + if let Some(i) = scn.intersect(ray) { + let p = ray.at(i.t); + let norm = i.shp.norm_at(&p) * 0.5 + Vector3f::new(0.5); + + return Spectrum::new_rgb(norm.x, norm.y, norm.z); + } + + Spectrum::new_rgb(0.0, 0.0, 0.0) + } +} -- cgit v1.2.3