blob: 90f12da0e4166370bbe8e642e9c823b7046c9eb0 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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)
}
}
|