aboutsummaryrefslogtreecommitdiff
path: root/src/world/shapes/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/world/shapes/mod.rs')
-rw-r--r--src/world/shapes/mod.rs26
1 files changed, 26 insertions, 0 deletions
diff --git a/src/world/shapes/mod.rs b/src/world/shapes/mod.rs
index d7583ad..a11df5d 100644
--- a/src/world/shapes/mod.rs
+++ b/src/world/shapes/mod.rs
@@ -2,3 +2,29 @@ mod sphere;
pub use sphere::Sphere;
+use crate::world::{Hittable, Intersection};
+use crate::core::{Bound3f, Ray};
+
+pub enum Shape {
+ Sphere(Sphere),
+}
+
+impl Hittable for Shape {
+ fn intersect(&self, ray: &Ray) -> Option<Intersection> {
+ match self {
+ Self::Sphere(sph) => sph.intersect(ray)
+ }
+ }
+
+ fn bounding_box(&self) -> Bound3f {
+ match self {
+ Self::Sphere(sph) => sph.bounding_box()
+ }
+ }
+}
+
+impl From<Sphere> for Shape {
+ fn from(s: Sphere) -> Self {
+ Self::Sphere(s)
+ }
+}