factor out shell generation
This commit is contained in:
parent
0f9291df7b
commit
5b8818a6b1
26
src/mesh.rs
26
src/mesh.rs
|
|
@ -7,7 +7,7 @@ pub struct Mesh {
|
|||
pub faces: Vec<[usize; 3]>,
|
||||
}
|
||||
|
||||
pub fn generate(shape: &crate::ShapeArgs) -> Mesh {
|
||||
pub fn shell(shape: &crate::ShapeArgs) -> Mesh {
|
||||
let mut vertices = Vec::<Vec3>::new();
|
||||
let mut faces = Vec::<[usize; 3]>::new();
|
||||
|
||||
|
|
@ -24,10 +24,6 @@ pub fn generate(shape: &crate::ShapeArgs) -> Mesh {
|
|||
let incline = height / (top_y - bottom_y);
|
||||
let elevation = -height / 2. - incline * bottom_y;
|
||||
|
||||
let base = vertices.len();
|
||||
for side in 0..(sides - 2) {
|
||||
faces.push([base + sides - 1, base + side + 1, base + side]);
|
||||
}
|
||||
for layer in 0..=layers {
|
||||
let angle = (PI / sides as f32) * (layer as f32 - base_layer as f32);
|
||||
let x = radius;
|
||||
|
|
@ -42,17 +38,27 @@ pub fn generate(shape: &crate::ShapeArgs) -> Mesh {
|
|||
}
|
||||
}
|
||||
for layer in 0..layers {
|
||||
let base = base + sides * layer;
|
||||
let base = sides * layer;
|
||||
for side in 0..sides {
|
||||
let index = |layer, offset| base + sides * layer + (side + offset) % sides;
|
||||
faces.push([index(0, 0), index(0, 1), index(1, 0)]);
|
||||
faces.push([index(0, 1), index(1, 1), index(1, 0)]);
|
||||
}
|
||||
}
|
||||
let base = vertices.len() - sides;
|
||||
for side in 0..(sides - 2) {
|
||||
faces.push([base + sides - 1, base + side, base + side + 1]);
|
||||
}
|
||||
|
||||
Mesh { vertices, faces }
|
||||
}
|
||||
|
||||
pub fn solid(shape: &crate::ShapeArgs) -> Mesh {
|
||||
let mut mesh = shell(shape);
|
||||
let sides = shape.sides as usize;
|
||||
for side in 0..(sides - 2) {
|
||||
mesh.faces.push([sides - 1, side + 1, side]);
|
||||
}
|
||||
let base = mesh.vertices.len() - sides;
|
||||
for side in 0..(sides - 2) {
|
||||
mesh.faces
|
||||
.push([base + sides - 1, base + side, base + side + 1]);
|
||||
}
|
||||
mesh
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user