Finished diffuse shading calculations
This commit is contained in:
parent
20c32fc467
commit
6ef2c65009
7 changed files with 65 additions and 171 deletions
|
|
@ -241,102 +241,3 @@ impl Surface for TriangleMesh {
|
|||
Bound { center: center, radius: radius + 1e-3, bypass: false }
|
||||
}
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
fn roundcolor(color: Color) -> Color {
|
||||
Color::new((color.red * 100.0).round() / 100.0, (color.green * 100.0).round() / 100.0, (color.blue * 100.0).round() / 100.0)
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn triangle_intersect() {
|
||||
let triangle = TriangleMesh::singleton_solid(Point3::new(0.0, 0.0, 0.0), Point3::new(1.0, 1.0, 0.0), Point3::new(0.0, 0.0, 1.0), Color::black());
|
||||
|
||||
let ray = Ray::new(Point3::new(0.5, 5.0, 0.3), Vector3::new(0.0, -1.0, 0.0));
|
||||
|
||||
let (t, u, v) = triangle.tris[0].intersect_(&triangle.vertices, ray).unwrap();
|
||||
|
||||
println!("{},{},{}", t, u, v);
|
||||
|
||||
assert!(t >= 0.0 && t <= 1.0);
|
||||
assert!(u >= 0.0 && u <= 1.0);
|
||||
assert!(v >= 0.0 && v <= 1.0);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn triangle_getcolor() {
|
||||
let triangle = TriangleMesh::singleton(Point3::new(0.0, 0.0, 0.0), Point3::new(1.0, 1.0, 0.0), Point3::new(0.0, 0.0, 1.0), |t, u, v| Color::new(t, u, v));
|
||||
|
||||
let t = 0.4;
|
||||
let u = 0.1;
|
||||
let v = 1.0 - t - u;
|
||||
|
||||
let point = triangle.tris[0].from_bary(&triangle.vertices, t, u, v);
|
||||
|
||||
assert_eq!(roundcolor(triangle.getcolor(point)), roundcolor(Color::new(t, u, v)));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn triangle_bounds() {
|
||||
let point1 = Point3::new(0.0, 0.0, 0.0);
|
||||
let point2 = Point3::new(1.0, 0.0, 0.0);
|
||||
let point3 = Point3::new(0.0, 1.0, 0.0);
|
||||
|
||||
let triangle = TriangleMesh::singleton_solid(point1, point2, point3, Color::black());
|
||||
|
||||
let bound = triangle.bound();
|
||||
|
||||
println!("{:?}", bound);
|
||||
|
||||
assert!(bound.contains(&point1));
|
||||
assert!(bound.contains(&point2));
|
||||
assert!(bound.contains(&point3));
|
||||
}
|
||||
/*
|
||||
#[test]
|
||||
fn triangle_tobound() {
|
||||
let point1 = Point3::new(-3.0, 4.0, -6.0);
|
||||
let point2 = Point3::new(5.0, -2.0, -7.0);
|
||||
let point3 = Point3::new(9.0, -7.0, 3.0);
|
||||
|
||||
let (center, radius) = triangle_sphere(&point1, &point2, &point3);
|
||||
let bound = Bound { center: center, radius: radius + 0.01, bypass: false };
|
||||
|
||||
println!("{:?}", bound);
|
||||
|
||||
println!("{}\n{}\n{}", distance(&bound.center, &point1),
|
||||
distance(&bound.center, &point2),
|
||||
distance(&bound.center, &point3));
|
||||
|
||||
assert!(bound.contains(&point1));
|
||||
assert!(bound.contains(&point2));
|
||||
assert!(bound.contains(&point3));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn triangle_tetrabound() {
|
||||
let point1 = Point3::new(8.0, -2.0, -5.0);
|
||||
let point2 = Point3::new(-3.0, 4.0, -6.0);
|
||||
let point3 = Point3::new(-3.0, -9.0, 3.0);
|
||||
let point4 = Point3::new(-6.0, 5.0, -9.0);
|
||||
|
||||
let (center, radius) = tetrahedron_sphere(&point1, &point2, &point3, &point4);
|
||||
|
||||
let bound = Bound { center: center, radius: radius + 0.01, bypass: false };
|
||||
|
||||
println!("{:?}", bound);
|
||||
|
||||
println!("{}\n{}\n{}\n{}", distance(&bound.center, &point1),
|
||||
distance(&bound.center, &point2),
|
||||
distance(&bound.center, &point3),
|
||||
distance(&bound.center, &point4));
|
||||
|
||||
assert!(bound.contains(&point1));
|
||||
assert!(bound.contains(&point2));
|
||||
assert!(bound.contains(&point3));
|
||||
assert!(bound.contains(&point4));
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue