Flatten
This commit is contained in:
parent
48cf277b08
commit
2ec43c822d
23
src/main.rs
23
src/main.rs
|
|
@ -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")?;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user