This commit is contained in:
numzero 2024-03-25 18:41:49 +03:00
parent 48cf277b08
commit 2ec43c822d

View File

@ -80,6 +80,21 @@ impl ObjMesh {
} }
Ok(result) Ok(result)
} }
fn flatten(&self) -> Vec<Face> {
self.faces.iter().map(|face| {
Face {
vertices: face.vertices.map(|iv| self.vertices[iv.vertex]),
normal: self.normals[face.vertices[0].normal],
}
}).collect()
}
}
#[derive(Copy, Clone, Debug)]
struct Face {
vertices: [Vec3; 3],
normal: Vec3,
} }
const W: i32 = 800; const W: i32 = 800;
@ -157,6 +172,7 @@ fn main() -> io::Result<()> {
let f = File::open(&args[1])?; let f = File::open(&args[1])?;
let mut f = BufReader::new(f); let mut f = BufReader::new(f);
ObjMesh::read(&mut f)? ObjMesh::read(&mut f)?
.flatten()
}; };
let mut img = Image { let mut img = Image {
w: W, w: W,
@ -179,14 +195,11 @@ fn main() -> io::Result<()> {
0.0, pitch.cos(), -pitch.sin(), 0.0, pitch.cos(), -pitch.sin(),
0.0, pitch.sin(), pitch.cos()); 0.0, pitch.sin(), pitch.cos());
let m_camera = m_roll * m_pitch * m_yaw; let m_camera = m_roll * m_pitch * m_yaw;
for f in mesh.faces { for f in mesh {
let vs = f.vertices let vs = f.vertices
.map(|v| mesh.vertices[v.vertex]);
let vs = vs
.map(|v| m_camera * v) .map(|v| m_camera * v)
.map(|v| vec2(W as f32 * 0.5 + v.x * SCALE, H as f32 * 0.5 + v.y * SCALE)); .map(|v| vec2(W as f32 * 0.5 + v.x * SCALE, H as f32 * 0.5 + v.y * SCALE));
let n = mesh.normals[f.vertices[0].normal]; let color = glm::clamp(to_ivec3(f.normal * 120.0 + 128.0), ivec3(0, 0, 0), ivec3(255, 255, 255));
let color = glm::clamp(to_ivec3(n * 120.0 + 128.0), ivec3(0, 0, 0), ivec3(255, 255, 255));
img.draw_tri(vs[0], vs[1], vs[2], Color(color.x as u8, color.y as u8, color.z as u8)); img.draw_tri(vs[0], vs[1], vs[2], Color(color.x as u8, color.y as u8, color.z as u8));
} }
let f = File::create("1.ppm")?; let f = File::create("1.ppm")?;