55 {
56 const float halfSize = size * 0.5f;
57
58 std::vector<Vertex> vertices;
59 std::vector<uint32_t> indices;
60
61 auto addFace = [&](glm::vec3 normal, glm::vec3 v0, glm::vec3 v1, glm::vec3 v2, glm::vec3 v3) {
62 uint32_t startIndex = (uint32_t) vertices.size();
63
64 Vertex a{ v0, normal, {0.0f, 0.0f} };
65 Vertex b{ v1, normal, {1.0f, 0.0f} };
66 Vertex c{ v2, normal, {1.0f, 1.0f} };
67 Vertex d{ v3, normal, {0.0f, 1.0f} };
68
69 vertices.push_back(a);
70 vertices.push_back(b);
71 vertices.push_back(c);
72 vertices.push_back(d);
73
74 indices.push_back(startIndex);
75 indices.push_back(startIndex + 1);
76 indices.push_back(startIndex + 2);
77 indices.push_back(startIndex);
78 indices.push_back(startIndex + 2);
79 indices.push_back(startIndex + 3);
80 };
81
82
83 addFace({ 0, 0, 1 },
84 { -halfSize, -halfSize, halfSize },
85 { halfSize, -halfSize, halfSize },
86 { halfSize, halfSize, halfSize },
87 { -halfSize, halfSize, halfSize });
88
89
90 addFace({ 0, 0, -1 },
91 { halfSize, -halfSize, -halfSize },
92 { -halfSize, -halfSize, -halfSize },
93 { -halfSize, halfSize, -halfSize },
94 { halfSize, halfSize, -halfSize });
95
96
97 addFace({ 1, 0, 0 },
98 { halfSize, -halfSize, halfSize },
99 { halfSize, -halfSize, -halfSize },
100 { halfSize, halfSize, -halfSize },
101 { halfSize, halfSize, halfSize });
102
103
104 addFace({ -1, 0, 0 },
105 { -halfSize, -halfSize, -halfSize },
106 { -halfSize, -halfSize, halfSize },
107 { -halfSize, halfSize, halfSize },
108 { -halfSize, halfSize, -halfSize });
109
110
111 addFace({ 0, 1, 0 },
112 { -halfSize, halfSize, halfSize },
113 { halfSize, halfSize, halfSize },
114 { halfSize, halfSize, -halfSize },
115 { -halfSize, halfSize, -halfSize });
116
117
118 addFace({ 0, -1, 0 },
119 { -halfSize, -halfSize, -halfSize },
120 { halfSize, -halfSize, -halfSize },
121 { halfSize, -halfSize, halfSize },
122 { -halfSize, -halfSize, halfSize });
123
124 return Mesh(vertices, indices, {});
125 }