Skip to main content

gl_utils/mesh/
cube.rs

1use super::*;
2
3/// (vertex count, index count)
4pub const fn lines3d_vertex_index_counts() -> (u32, u32) {
5  // 8 vertices, 12 edges (2 indices per line segment = 24 indices)
6  (8, 24)
7}
8
9impl Lines3d {
10  pub fn cube (index_offset : u32) -> Self {
11    let vertex = |x, y, z| vertex::Vert3dInstanced { inst_position: [x, y, z] };
12    let vertices = vec![
13      // bottom
14      vertex (-1.0, -1.0, -1.0),
15      vertex (-1.0,  1.0, -1.0),
16      vertex ( 1.0,  1.0, -1.0),
17      vertex ( 1.0, -1.0, -1.0),
18      // top
19      vertex (-1.0, -1.0,  1.0),
20      vertex (-1.0,  1.0,  1.0),
21      vertex ( 1.0,  1.0,  1.0),
22      vertex ( 1.0, -1.0,  1.0)
23    ];
24
25    let indices = [
26      // bottom
27      0, 1,
28      1, 2,
29      2, 3,
30      3, 0,
31      // top
32      4, 5,
33      5, 6,
34      6, 7,
35      7, 4,
36      // sides
37      0, 4,
38      1, 5,
39      2, 6,
40      3, 7
41    ].map (|i| i + index_offset).into_iter().collect::<Vec<_>>();
42
43    if cfg!(debug_assertions) {
44      let (num_vertices, num_indices) = lines3d_vertex_index_counts();
45      debug_assert_eq!(vertices.len(), num_vertices as usize);
46      debug_assert_eq!(indices.len(), num_indices as usize);
47    }
48
49    Lines3d { vertices, indices }
50  }
51}