Depth sorting
This commit is contained in:
parent
e3c99349a5
commit
971bb171be
15
src/main.rs
15
src/main.rs
|
|
@ -124,11 +124,22 @@ fn main() -> io::Result<()> {
|
||||||
|
|
||||||
let base = m_camera * base;
|
let base = m_camera * base;
|
||||||
let ray = m_camera * normalize(ray);
|
let ray = m_camera * normalize(ray);
|
||||||
|
let mut dist = f32::INFINITY;
|
||||||
|
|
||||||
for f in &mesh {
|
for f in &mesh {
|
||||||
let color = clamp(to_ivec3(f.normal * 120.0 + 128.0), ivec3(0, 0, 0), ivec3(255, 255, 255));
|
let color = clamp(to_ivec3(f.normal * 120.0 + 128.0), ivec3(0, 0, 0), ivec3(255, 255, 255));
|
||||||
let ds = (0..3).map(|k| edge_dist(f.vertices[k], f.vertices[(k + 1) % 3], base, ray));
|
let fs = (0..3).map(|k| edge_dist(f.vertices[k], f.vertices[(k + 1) % 3], base, ray));
|
||||||
if ds.into_iter().all(|d| d > 0.0) {
|
if fs.into_iter().all(|f| f > 0.0) {
|
||||||
|
let m = Mat3 { c0: f.vertices[1] - f.vertices[0], c1: f.vertices[2] - f.vertices[0], c2: -ray };
|
||||||
|
if let Some(m) = m.inverse() {
|
||||||
|
let rel = m * (base - f.vertices[0]);
|
||||||
|
if rel.z > dist {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
dist = rel.z;
|
||||||
|
} else {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
img.put_pixel(x, y, Color(color.x as u8, color.y as u8, color.z as u8));
|
img.put_pixel(x, y, Color(color.x as u8, color.y as u8, color.z as u8));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user