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::geometry::{Geometry, Line, Plane, Sphere};
|
||||||
use hello::math::{Mat4x4, Point3};
|
use hello::math::{Mat4x4, Point3, Vector3};
|
||||||
|
|
||||||
use std::rc::Rc;
|
use std::rc::Rc;
|
||||||
|
|
||||||
@ -24,8 +24,8 @@ impl Texture {
|
|||||||
|
|
||||||
let mut pixel = Vec::new();
|
let mut pixel = Vec::new();
|
||||||
|
|
||||||
for x in 0..width {
|
for _ in 0..width {
|
||||||
for y in 0..height {
|
for _ in 0..height {
|
||||||
pixel.push(RGB {
|
pixel.push(RGB {
|
||||||
red: 1.0,
|
red: 1.0,
|
||||||
green: 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() {
|
fn main() {
|
||||||
let tex = Rc::new(Texture::load_texture());
|
let tex = Rc::new(Texture::load_texture());
|
||||||
|
|
||||||
let sphere = Geometry::Sphere(Sphere::new(Point3::new(0.0, 0.0, 0.0), 1.0));
|
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(
|
let geo1 = RenderableGeometry::new(
|
||||||
Mat4x4::ident(),
|
Mat4x4::ident(),
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user