Polymorpism by dyn Trait and Boxes
This commit is contained in:
parent
65bb4d4897
commit
3ea1a7c5aa
47
src/main.rs
47
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<Box<dyn Renderable>> = 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(),
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user