|
7 | 7 | namespace Nova { |
8 | 8 | struct Vertex { |
9 | 9 | Vector3 pos; |
10 | | - // Future: Vector3 normal; Vector2 uv; |
| 10 | + Vector3 normal; |
11 | 11 | }; |
12 | 12 |
|
13 | 13 | struct Mesh { |
14 | 14 | std::vector<Vertex> vertices; |
15 | | - std::vector<uint32_t> indices; // Optional, but better for performance |
| 15 | + std::vector<uint32_t> indices; |
16 | 16 | }; |
17 | 17 |
|
18 | 18 | class Geometry { |
19 | 19 | public: |
20 | 20 | static Mesh CreateCube() { |
21 | 21 | Mesh mesh; |
22 | | - // Define the 8 corners of a 1x1x1 cube |
23 | | - // We use 36 vertices for a "flat shaded" look (6 faces * 2 triangles * 3 verts) |
| 22 | + // 36 vertices for flat shading (6 faces * 2 triangles * 3 verts) |
24 | 23 | mesh.vertices = { |
25 | 24 | // Front face (Z+) |
26 | | - {{-0.5f, -0.5f, 0.5f}}, {{ 0.5f, -0.5f, 0.5f}}, {{ 0.5f, 0.5f, 0.5f}}, |
27 | | - {{ 0.5f, 0.5f, 0.5f}}, {{-0.5f, 0.5f, 0.5f}}, {{-0.5f, -0.5f, 0.5f}}, |
| 25 | + {{-0.5f, -0.5f, 0.5f}, {0, 0, 1}}, {{ 0.5f, -0.5f, 0.5f}, {0, 0, 1}}, {{ 0.5f, 0.5f, 0.5f}, {0, 0, 1}}, |
| 26 | + {{ 0.5f, 0.5f, 0.5f}, {0, 0, 1}}, {{-0.5f, 0.5f, 0.5f}, {0, 0, 1}}, {{-0.5f, -0.5f, 0.5f}, {0, 0, 1}}, |
28 | 27 | // Back face (Z-) |
29 | | - {{-0.5f, -0.5f, -0.5f}}, {{-0.5f, 0.5f, -0.5f}}, {{ 0.5f, 0.5f, -0.5f}}, |
30 | | - {{ 0.5f, 0.5f, -0.5f}}, {{ 0.5f, -0.5f, -0.5f}}, {{-0.5f, -0.5f, -0.5f}}, |
| 28 | + {{-0.5f, -0.5f, -0.5f}, {0, 0, -1}}, {{-0.5f, 0.5f, -0.5f}, {0, 0, -1}}, {{ 0.5f, 0.5f, -0.5f}, {0, 0, -1}}, |
| 29 | + {{ 0.5f, 0.5f, -0.5f}, {0, 0, -1}}, {{ 0.5f, -0.5f, -0.5f}, {0, 0, -1}}, {{-0.5f, -0.5f, -0.5f}, {0, 0, -1}}, |
31 | 30 | // Left face (X-) |
32 | | - {{-0.5f, 0.5f, 0.5f}}, {{-0.5f, 0.5f, -0.5f}}, {{-0.5f, -0.5f, -0.5f}}, |
33 | | - {{-0.5f, -0.5f, -0.5f}}, {{-0.5f, -0.5f, 0.5f}}, {{-0.5f, 0.5f, 0.5f}}, |
| 31 | + {{-0.5f, 0.5f, 0.5f}, {-1, 0, 0}}, {{-0.5f, 0.5f, -0.5f}, {-1, 0, 0}}, {{-0.5f, -0.5f, -0.5f}, {-1, 0, 0}}, |
| 32 | + {{-0.5f, -0.5f, -0.5f}, {-1, 0, 0}}, {{-0.5f, -0.5f, 0.5f}, {-1, 0, 0}}, {{-0.5f, 0.5f, 0.5f}, {-1, 0, 0}}, |
34 | 33 | // Right face (X+) |
35 | | - {{ 0.5f, 0.5f, 0.5f}}, {{ 0.5f, -0.5f, 0.5f}}, {{ 0.5f, -0.5f, -0.5f}}, |
36 | | - {{ 0.5f, -0.5f, -0.5f}}, {{ 0.5f, 0.5f, -0.5f}}, {{ 0.5f, 0.5f, 0.5f}}, |
| 34 | + {{ 0.5f, 0.5f, 0.5f}, {1, 0, 0}}, {{ 0.5f, -0.5f, 0.5f}, {1, 0, 0}}, {{ 0.5f, -0.5f, -0.5f}, {1, 0, 0}}, |
| 35 | + {{ 0.5f, -0.5f, -0.5f}, {1, 0, 0}}, {{ 0.5f, 0.5f, -0.5f}, {1, 0, 0}}, {{ 0.5f, 0.5f, 0.5f}, {1, 0, 0}}, |
37 | 36 | // Top face (Y+) |
38 | | - {{-0.5f, 0.5f, -0.5f}}, {{-0.5f, 0.5f, 0.5f}}, {{ 0.5f, 0.5f, 0.5f}}, |
39 | | - {{ 0.5f, 0.5f, 0.5f}}, {{ 0.5f, 0.5f, -0.5f}}, {{-0.5f, 0.5f, -0.5f}}, |
| 37 | + {{-0.5f, 0.5f, -0.5f}, {0, 1, 0}}, {{-0.5f, 0.5f, 0.5f}, {0, 1, 0}}, {{ 0.5f, 0.5f, 0.5f}, {0, 1, 0}}, |
| 38 | + {{ 0.5f, 0.5f, 0.5f}, {0, 1, 0}}, {{ 0.5f, 0.5f, -0.5f}, {0, 1, 0}}, {{-0.5f, 0.5f, -0.5f}, {0, 1, 0}}, |
40 | 39 | // Bottom face (Y-) |
41 | | - {{-0.5f, -0.5f, -0.5f}}, {{ 0.5f, -0.5f, -0.5f}}, {{ 0.5f, -0.5f, 0.5f}}, |
42 | | - {{ 0.5f, -0.5f, 0.5f}}, {{-0.5f, -0.5f, 0.5f}}, {{-0.5f, -0.5f, -0.5f}} |
| 40 | + {{-0.5f, -0.5f, -0.5f}, {0, -1, 0}}, {{ 0.5f, -0.5f, -0.5f}, {0, -1, 0}}, {{ 0.5f, -0.5f, 0.5f}, {0, -1, 0}}, |
| 41 | + {{ 0.5f, -0.5f, 0.5f}, {0, -1, 0}}, {{-0.5f, -0.5f, 0.5f}, {0, -1, 0}}, {{-0.5f, -0.5f, -0.5f}, {0, -1, 0}} |
43 | 42 | }; |
44 | 43 | return mesh; |
45 | 44 | } |
|
0 commit comments