diff options
author | Julian T <julian@jtle.dk> | 2021-02-03 17:54:03 +0100 |
---|---|---|
committer | Julian T <julian@jtle.dk> | 2021-02-03 17:54:03 +0100 |
commit | 9235e74dfbc41895a5f8807e1ab93508268a39ea (patch) | |
tree | b8e85390b9e131736016dd2589d5e6ea14013552 /src/scene/shapes | |
parent | 977b0e4152433b2a68e2b97fe5fe2c0ff6fb20d8 (diff) |
Base render of surface normal, and abstract shading and tracing to the
trace module
Diffstat (limited to 'src/scene/shapes')
-rw-r--r-- | src/scene/shapes/mod.rs | 8 | ||||
-rw-r--r-- | src/scene/shapes/sphere.rs | 6 |
2 files changed, 13 insertions, 1 deletions
diff --git a/src/scene/shapes/mod.rs b/src/scene/shapes/mod.rs index 7fbb8db..9b6bdfd 100644 --- a/src/scene/shapes/mod.rs +++ b/src/scene/shapes/mod.rs @@ -2,9 +2,15 @@ mod sphere; pub use sphere::Sphere; -use crate::core::Ray; +use crate::core::{Vector3f, Ray}; use crate::Float; pub trait Shape { fn intersect(&self, ray: &Ray) -> Option<Float>; + + /// Calculates the normal at point + /// + /// Point is assumed to be on the circle. + /// The resulting vector is assumed to be normalized. + fn norm_at(&self, point: &Vector3f) -> Vector3f; } diff --git a/src/scene/shapes/sphere.rs b/src/scene/shapes/sphere.rs index e30c1ec..da7f321 100644 --- a/src/scene/shapes/sphere.rs +++ b/src/scene/shapes/sphere.rs @@ -35,6 +35,12 @@ impl Shape for Sphere { } } + + fn norm_at(&self, point: &Vector3f) -> Vector3f { + let mut v = *point - self.center; + v /= self.radius; + v + } } #[cfg(test)] |