library: render: add Object implementation
This commit is contained in:
parent
2dab475f68
commit
4f3af74c22
|
@ -0,0 +1,2 @@
|
|||
pub mod object;
|
||||
pub use object::*;
|
90
src/render/object.rs
Normal file
90
src/render/object.rs
Normal file
|
@ -0,0 +1,90 @@
|
|||
use super::super::material::Material;
|
||||
use super::super::shape::Shape;
|
||||
use super::super::texture::Texture;
|
||||
|
||||
/// An object being rendered in the scene.
|
||||
#[derive(Debug)]
|
||||
pub struct Object<'a> {
|
||||
pub shape: &'a dyn Shape,
|
||||
pub material: &'a dyn Material,
|
||||
pub texture: &'a dyn Texture,
|
||||
}
|
||||
|
||||
impl<'a> Object<'a> {
|
||||
#[allow(dead_code)] // FIXME: remove this when used
|
||||
pub fn new(shape: &'a dyn Shape, material: &'a dyn Material, texture: &'a dyn Texture) -> Self {
|
||||
Object {
|
||||
shape,
|
||||
material,
|
||||
texture,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
use super::*;
|
||||
|
||||
use crate::core::color::LinearColor;
|
||||
use crate::*;
|
||||
use bvh::{
|
||||
aabb::{Bounded, AABB},
|
||||
ray::Ray,
|
||||
};
|
||||
|
||||
/// NOTE(Bruno): those dummy implementations could be used somewhere else ?
|
||||
|
||||
#[derive(Debug)]
|
||||
struct DummyShape {}
|
||||
|
||||
impl Bounded for DummyShape {
|
||||
fn aabb(&self) -> AABB {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
||||
impl Shape for DummyShape {
|
||||
/// Return the distance at which the object intersects with the ray, or None if it does not.
|
||||
fn intersect(&self, _: &Ray) -> Option<f32> {
|
||||
todo!()
|
||||
}
|
||||
/// Return the unit vector corresponding to the normal at this point of the shape.
|
||||
fn normal(&self, _: &Point) -> Vector {
|
||||
todo!()
|
||||
}
|
||||
/// Project the point from the shape's surface to its texel coordinates.
|
||||
fn project_texel(&self, _: &Point) -> Point2D {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
struct DummyMaterial {}
|
||||
|
||||
impl Material for DummyMaterial {
|
||||
fn diffuse(&self, _: Point2D) -> LinearColor {
|
||||
todo!()
|
||||
}
|
||||
fn specular(&self, _: Point2D) -> LinearColor {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
struct DummyTexture {}
|
||||
|
||||
impl Texture for DummyTexture {
|
||||
fn texel_color(&self, _: Point2D) -> LinearColor {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn new_works() {
|
||||
let shape = DummyShape {};
|
||||
let material = DummyMaterial {};
|
||||
let texture = DummyTexture {};
|
||||
let _ = Object::new(&shape, &material, &texture);
|
||||
// Can't compare the results... Just make sure the new compiles.
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue