diff --git a/src/main.rs b/src/main.rs index 41c424c..3f0c9ce 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,5 +1,5 @@ -use hello::geometry::{self, Geometry, Sphere}; -use hello::math::{Mat4x4, Point3}; +use hello::geometry::{Geometry, Line, Plane, Sphere}; +use hello::math::{Mat4x4, Point3, Vector3}; use std::rc::Rc; @@ -24,8 +24,8 @@ impl Texture { let mut pixel = Vec::new(); - for x in 0..width { - for y in 0..height { + for _ in 0..width { + for _ in 0..height { pixel.push(RGB { red: 1.0, green: 1.0, @@ -58,11 +58,48 @@ impl RenderableGeometry { } } +trait Renderable { + fn render(&self); +} + +impl Renderable for Sphere { + fn render(&self) { + println!("Rendering Sphere!"); + } +} + +impl Renderable for Plane { + fn render(&self) { + println!("Rendering Plane!"); + } +} + +impl Renderable for Line { + fn render(&self) { + println!("Rendering Line!"); + } +} + fn main() { let tex = Rc::new(Texture::load_texture()); let sphere = Geometry::Sphere(Sphere::new(Point3::new(0.0, 0.0, 0.0), 1.0)); - sphere.draw(); + let geometries = vec![sphere]; + + for g in geometries { + g.draw(); + } + + let mut renderables: Vec> = Vec::new(); + renderables.push(Box::new(Sphere::new(Point3::new(0.0, 0.0, 0.0), 1.0))); + renderables.push(Box::new(Plane::new( + Point3::new(0.0, 0.0, 0.0), + Vector3::new(0.0, 1.0, 0.0), + ))); + + for r in renderables { + r.render(); + } let geo1 = RenderableGeometry::new( Mat4x4::ident(),