33#include < vector>
44#include < glm/glm.hpp>
55#include < glm/gtc/quaternion.hpp>
6+ #define GLM_ENABLE_EXPERIMENTAL
67#include < glm/gtc/matrix_inverse.hpp>
78#include < glm/gtc/matrix_transform.hpp>
89#include < glm/gtx/transform.hpp>
@@ -20,53 +21,52 @@ namespace ShapeGenerator {
2021 vector<Vert> verts;
2122
2223 // -Z
23- verts.emplace_back (Vert{.pos = {max.x , max.y , min.z }, .color = color, .normal = {0 , 0 , -1 },});
24- verts.emplace_back (Vert{.pos = {min.x , max.y , min.z }, .color = color, .normal = {0 , 0 , -1 },});
25- verts.emplace_back (Vert{.pos = {min.x , min.y , min.z }, .color = color, .normal = {0 , 0 , -1 },});
26- verts.emplace_back (Vert{.pos = {min.x , min.y , min.z }, .color = color, .normal = {0 , 0 , -1 },});
27- verts.emplace_back (Vert{.pos = {max.x , min.y , min.z }, .color = color, .normal = {0 , 0 , -1 },});
28- verts.emplace_back (Vert{.pos = {max.x , max.y , min.z }, .color = color, .normal = {0 , 0 , -1 },});
29-
24+ verts.emplace_back (Vert{.pos = {max.x , max.y , min.z }, .color = color, .normal = {0 , 0 , -1 }, .barycentric = {1 , 0 , 0 },});
25+ verts.emplace_back (Vert{.pos = {min.x , max.y , min.z }, .color = color, .normal = {0 , 0 , -1 }, .barycentric = {0 , 1 , 0 },});
26+ verts.emplace_back (Vert{.pos = {min.x , min.y , min.z }, .color = color, .normal = {0 , 0 , -1 }, .barycentric = {0 , 0 , 1 },});
27+ verts.emplace_back (Vert{.pos = {min.x , min.y , min.z }, .color = color, .normal = {0 , 0 , -1 }, .barycentric = {1 , 0 , 0 },});
28+ verts.emplace_back (Vert{.pos = {max.x , min.y , min.z }, .color = color, .normal = {0 , 0 , -1 }, .barycentric = {0 , 1 , 0 },});
29+ verts.emplace_back (Vert{.pos = {max.x , max.y , min.z }, .color = color, .normal = {0 , 0 , -1 }, .barycentric = {0 , 0 , 1 },});
3030
3131 // +Z
32- verts.emplace_back (Vert{.pos = {min.x , min.y , max.z }, .color = color, .normal = {0 , 0 , 1 },});
33- verts.emplace_back (Vert{.pos = {min.x , max.y , max.z }, .color = color, .normal = {0 , 0 , 1 },});
34- verts.emplace_back (Vert{.pos = {max.x , max.y , max.z }, .color = color, .normal = {0 , 0 , 1 },});
35- verts.emplace_back (Vert{.pos = {max.x , max.y , max.z }, .color = color, .normal = {0 , 0 , 1 },});
36- verts.emplace_back (Vert{.pos = {max.x , min.y , max.z }, .color = color, .normal = {0 , 0 , 1 },});
37- verts.emplace_back (Vert{.pos = {min.x , min.y , max.z }, .color = color, .normal = {0 , 0 , 1 },});
32+ verts.emplace_back (Vert{.pos = {min.x , min.y , max.z }, .color = color, .normal = {0 , 0 , 1 }, . barycentric = { 1 , 0 , 0 }, });
33+ verts.emplace_back (Vert{.pos = {min.x , max.y , max.z }, .color = color, .normal = {0 , 0 , 1 }, . barycentric = { 0 , 1 , 0 }, });
34+ verts.emplace_back (Vert{.pos = {max.x , max.y , max.z }, .color = color, .normal = {0 , 0 , 1 }, . barycentric = { 0 , 0 , 1 }, });
35+ verts.emplace_back (Vert{.pos = {max.x , max.y , max.z }, .color = color, .normal = {0 , 0 , 1 }, . barycentric = { 1 , 0 , 0 }, });
36+ verts.emplace_back (Vert{.pos = {max.x , min.y , max.z }, .color = color, .normal = {0 , 0 , 1 }, . barycentric = { 0 , 1 , 0 }, });
37+ verts.emplace_back (Vert{.pos = {min.x , min.y , max.z }, .color = color, .normal = {0 , 0 , 1 }, . barycentric = { 0 , 0 , 1 }, });
3838
3939 // -X
40- verts.emplace_back (Vert{.pos = {min.x , min.y , min.z }, .color = color, .normal = {-1 , 0 , 0 },});
41- verts.emplace_back (Vert{.pos = {min.x , max.y , min.z }, .color = color, .normal = {-1 , 0 , 0 },});
42- verts.emplace_back (Vert{.pos = {min.x , max.y , max.z }, .color = color, .normal = {-1 , 0 , 0 },});
43- verts.emplace_back (Vert{.pos = {min.x , max.y , max.z }, .color = color, .normal = {-1 , 0 , 0 },});
44- verts.emplace_back (Vert{.pos = {min.x , min.y , max.z }, .color = color, .normal = {-1 , 0 , 0 },});
45- verts.emplace_back (Vert{.pos = {min.x , min.y , min.z }, .color = color, .normal = {-1 , 0 , 0 },});
40+ verts.emplace_back (Vert{.pos = {min.x , min.y , min.z }, .color = color, .normal = {-1 , 0 , 0 }, . barycentric = { 1 , 0 , 0 }, });
41+ verts.emplace_back (Vert{.pos = {min.x , max.y , min.z }, .color = color, .normal = {-1 , 0 , 0 }, . barycentric = { 0 , 1 , 0 }, });
42+ verts.emplace_back (Vert{.pos = {min.x , max.y , max.z }, .color = color, .normal = {-1 , 0 , 0 }, . barycentric = { 0 , 0 , 1 }, });
43+ verts.emplace_back (Vert{.pos = {min.x , max.y , max.z }, .color = color, .normal = {-1 , 0 , 0 }, . barycentric = { 1 , 0 , 0 }, });
44+ verts.emplace_back (Vert{.pos = {min.x , min.y , max.z }, .color = color, .normal = {-1 , 0 , 0 }, . barycentric = { 0 , 1 , 0 }, });
45+ verts.emplace_back (Vert{.pos = {min.x , min.y , min.z }, .color = color, .normal = {-1 , 0 , 0 }, . barycentric = { 0 , 0 , 1 }, });
4646
4747 // +X
48- verts.emplace_back (Vert{.pos = {max.x , max.y , max.z }, .color = color, .normal = {1 , 0 , 0 },});
49- verts.emplace_back (Vert{.pos = {max.x , max.y , min.z }, .color = color, .normal = {1 , 0 , 0 },});
50- verts.emplace_back (Vert{.pos = {max.x , min.y , min.z }, .color = color, .normal = {1 , 0 , 0 },});
51- verts.emplace_back (Vert{.pos = {max.x , min.y , min.z }, .color = color, .normal = {1 , 0 , 0 },});
52- verts.emplace_back (Vert{.pos = {max.x , min.y , max.z }, .color = color, .normal = {1 , 0 , 0 },});
53- verts.emplace_back (Vert{.pos = {max.x , max.y , max.z }, .color = color, .normal = {1 , 0 , 0 },});
48+ verts.emplace_back (Vert{.pos = {max.x , max.y , max.z }, .color = color, .normal = {1 , 0 , 0 }, . barycentric = { 1 , 0 , 0 }, });
49+ verts.emplace_back (Vert{.pos = {max.x , max.y , min.z }, .color = color, .normal = {1 , 0 , 0 }, . barycentric = { 0 , 1 , 0 }, });
50+ verts.emplace_back (Vert{.pos = {max.x , min.y , min.z }, .color = color, .normal = {1 , 0 , 0 }, . barycentric = { 0 , 0 , 1 }, });
51+ verts.emplace_back (Vert{.pos = {max.x , min.y , min.z }, .color = color, .normal = {1 , 0 , 0 }, . barycentric = { 1 , 0 , 0 }, });
52+ verts.emplace_back (Vert{.pos = {max.x , min.y , max.z }, .color = color, .normal = {1 , 0 , 0 }, . barycentric = { 0 , 1 , 0 }, });
53+ verts.emplace_back (Vert{.pos = {max.x , max.y , max.z }, .color = color, .normal = {1 , 0 , 0 }, . barycentric = { 0 , 0 , 1 }, });
5454
5555 // -Y
56- verts.emplace_back (Vert{.pos = {max.x , min.y , max.z }, .color = color, .normal = {0 , -1 , 0 },});
57- verts.emplace_back (Vert{.pos = {max.x , min.y , min.z }, .color = color, .normal = {0 , -1 , 0 },});
58- verts.emplace_back (Vert{.pos = {min.x , min.y , min.z }, .color = color, .normal = {0 , -1 , 0 },});
59- verts.emplace_back (Vert{.pos = {min.x , min.y , min.z }, .color = color, .normal = {0 , -1 , 0 },});
60- verts.emplace_back (Vert{.pos = {min.x , min.y , max.z }, .color = color, .normal = {0 , -1 , 0 },});
61- verts.emplace_back (Vert{.pos = {max.x , min.y , max.z }, .color = color, .normal = {0 , -1 , 0 },});
56+ verts.emplace_back (Vert{.pos = {max.x , min.y , max.z }, .color = color, .normal = {0 , -1 , 0 }, . barycentric = { 1 , 0 , 0 }, });
57+ verts.emplace_back (Vert{.pos = {max.x , min.y , min.z }, .color = color, .normal = {0 , -1 , 0 }, . barycentric = { 0 , 1 , 0 }, });
58+ verts.emplace_back (Vert{.pos = {min.x , min.y , min.z }, .color = color, .normal = {0 , -1 , 0 }, . barycentric = { 0 , 0 , 1 }, });
59+ verts.emplace_back (Vert{.pos = {min.x , min.y , min.z }, .color = color, .normal = {0 , -1 , 0 }, . barycentric = { 1 , 0 , 0 }, });
60+ verts.emplace_back (Vert{.pos = {min.x , min.y , max.z }, .color = color, .normal = {0 , -1 , 0 }, . barycentric = { 0 , 1 , 0 }, });
61+ verts.emplace_back (Vert{.pos = {max.x , min.y , max.z }, .color = color, .normal = {0 , -1 , 0 }, . barycentric = { 0 , 0 , 1 }, });
6262
6363 // +Y
64- verts.emplace_back (Vert{.pos = {min.x , max.y , min.z }, .color = color, .normal = {0 , 1 , 0 },});
65- verts.emplace_back (Vert{.pos = {max.x , max.y , min.z }, .color = color, .normal = {0 , 1 , 0 },});
66- verts.emplace_back (Vert{.pos = {max.x , max.y , max.z }, .color = color, .normal = {0 , 1 , 0 },});
67- verts.emplace_back (Vert{.pos = {max.x , max.y , max.z }, .color = color, .normal = {0 , 1 , 0 },});
68- verts.emplace_back (Vert{.pos = {min.x , max.y , max.z }, .color = color, .normal = {0 , 1 , 0 },});
69- verts.emplace_back (Vert{.pos = {min.x , max.y , min.z }, .color = color, .normal = {0 , 1 , 0 },});
64+ verts.emplace_back (Vert{.pos = {min.x , max.y , min.z }, .color = color, .normal = {0 , 1 , 0 }, . barycentric = { 1 , 0 , 0 }, });
65+ verts.emplace_back (Vert{.pos = {max.x , max.y , min.z }, .color = color, .normal = {0 , 1 , 0 }, . barycentric = { 0 , 1 , 0 }, });
66+ verts.emplace_back (Vert{.pos = {max.x , max.y , max.z }, .color = color, .normal = {0 , 1 , 0 }, . barycentric = { 0 , 0 , 1 }, });
67+ verts.emplace_back (Vert{.pos = {max.x , max.y , max.z }, .color = color, .normal = {0 , 1 , 0 }, . barycentric = { 1 , 0 , 0 }, });
68+ verts.emplace_back (Vert{.pos = {min.x , max.y , max.z }, .color = color, .normal = {0 , 1 , 0 }, . barycentric = { 0 , 1 , 0 }, });
69+ verts.emplace_back (Vert{.pos = {min.x , max.y , min.z }, .color = color, .normal = {0 , 1 , 0 }, . barycentric = { 0 , 0 , 1 }, });
7070
7171 return verts;
7272 }
@@ -162,13 +162,13 @@ namespace ShapeGenerator {
162162 n = glm::normalize (glm::cross (topRight - bottomLeft, topRight - bottomRight));
163163 }
164164
165- verts.emplace_back (Vert{.pos = center + topLeft * radius, .color = color, .normal = n});
166- verts.emplace_back (Vert{.pos = center + topRight * radius, .color = color, .normal = n});
167- verts.emplace_back (Vert{.pos = center + bottomRight * radius, .color = color, .normal = n});
165+ verts.emplace_back (Vert{.pos = center + topLeft * radius, .color = color, .normal = n, . barycentric = { 1 , 0 , 0 }, });
166+ verts.emplace_back (Vert{.pos = center + topRight * radius, .color = color, .normal = n, . barycentric = { 0 , 1 , 0 }, });
167+ verts.emplace_back (Vert{.pos = center + bottomRight * radius, .color = color, .normal = n, . barycentric = { 0 , 0 , 1 }, });
168168
169- verts.emplace_back (Vert{.pos = center + bottomRight * radius, .color = color, .normal = n});
170- verts.emplace_back (Vert{.pos = center + bottomLeft * radius, .color = color, .normal = n});
171- verts.emplace_back (Vert{.pos = center + topLeft * radius, .color = color, .normal = n});
169+ verts.emplace_back (Vert{.pos = center + bottomRight * radius, .color = color, .normal = n, . barycentric = { 1 , 0 , 0 }, });
170+ verts.emplace_back (Vert{.pos = center + bottomLeft * radius, .color = color, .normal = n, . barycentric = { 0 , 1 , 0 }, });
171+ verts.emplace_back (Vert{.pos = center + topLeft * radius, .color = color, .normal = n, . barycentric = { 0 , 0 , 1 }, });
172172 }
173173 }
174174
@@ -199,7 +199,7 @@ namespace ShapeGenerator {
199199
200200 res.emplace_back (Vert{.pos =seg.start , .color =color});
201201 res.emplace_back (Vert{.pos =seg.end , .color =color});
202-
202+
203203 return seg;
204204 };
205205
0 commit comments