library: material: add Material implementation
This commit is contained in:
parent
9fa0da1b83
commit
2a36728468
|
@ -0,0 +1,56 @@
|
|||
use super::core::color::LinearColor;
|
||||
|
||||
/// Represent the physical light properties of an object in the scene.
|
||||
#[derive(Debug, PartialEq)]
|
||||
pub struct Material {
|
||||
/// The diffuse component.
|
||||
diffuse: LinearColor,
|
||||
/// The specular component.
|
||||
specular: LinearColor,
|
||||
}
|
||||
|
||||
impl Material {
|
||||
pub fn new(diffuse: LinearColor, specular: LinearColor) -> Self {
|
||||
Material { diffuse, specular }
|
||||
}
|
||||
|
||||
pub fn diffuse(&self) -> &LinearColor {
|
||||
&self.diffuse
|
||||
}
|
||||
|
||||
pub fn specular(&self) -> &LinearColor {
|
||||
&self.specular
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod test {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn new_works() {
|
||||
let diffuse = LinearColor::new(0., 0.5, 0.);
|
||||
let specular = LinearColor::new(1., 1., 1.);
|
||||
let mat = Material::new(diffuse.clone(), specular.clone());
|
||||
assert_eq!(mat, Material { diffuse, specular })
|
||||
}
|
||||
|
||||
fn simple_material() -> Material {
|
||||
Material::new(
|
||||
LinearColor::new(0.5, 0.5, 0.5),
|
||||
LinearColor::new(1., 1., 1.),
|
||||
)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn diffuse_works() {
|
||||
let mat = simple_material();
|
||||
assert_eq!(mat.diffuse(), &LinearColor::new(0.5, 0.5, 0.5))
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn specular_works() {
|
||||
let mat = simple_material();
|
||||
assert_eq!(mat.specular(), &LinearColor::new(1., 1., 1.))
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue