use crate::{
geom::{Transform, Vector},
graphics::{Background, GpuTriangle, Vertex}
};
pub struct Mesh {
pub vertices: Vec<Vertex>,
pub triangles: Vec<GpuTriangle>
}
impl Mesh {
pub fn new() -> Mesh {
Mesh {
vertices: Vec::new(),
triangles: Vec::new()
}
}
pub fn clear(&mut self) {
self.vertices.clear();
self.triangles.clear();
}
pub fn add_positioned_vertices(&mut self, vertices: impl Iterator<Item = Vector>,
trans: Transform, tex_trans: Option<Transform>, bkg: Background) -> u32 {
let offset = self.vertices.len();
self.vertices.extend(vertices
.map(|v| Vertex::new(trans * v, tex_trans.map(|trans| trans * v), bkg)));
offset as u32
}
pub fn extend(&mut self, other: &Mesh) {
self.vertices.extend(other.vertices.iter().cloned());
self.triangles.extend(other.triangles.iter().cloned());
}
}