PBR checkpoint
[opengl.git] / shapes.hpp
1 #include <array>
2 #define GLM_FORCE_PURE
3 #include <glm/glm.hpp>
4
5 using namespace std;
6
7 constexpr array<glm::vec3, 6> quadToTriangles(const array<glm::vec3, 4> quads) {
8         return {
9                 quads[0],
10                 quads[1],
11                 quads[2],
12                 quads[2],
13                 quads[3],
14                 quads[0]
15         };
16 }
17
18 constexpr array<glm::vec3, 36> cube() {
19         int i = 0;
20         array<glm::vec3, 36> vertices;
21         
22         const array<glm::vec3, 4> front = {
23                 glm::vec3(1, -1, -1),
24                 glm::vec3(-1, -1, -1),
25                 glm::vec3(-1, 1, -1),
26                 glm::vec3(1, 1, -1)
27         };
28         
29         for (auto v: quadToTriangles(front))
30                 vertices[i++] = v;
31
32         const array<glm::vec3, 4> back = {
33                 glm::vec3(1, 1, 1),
34                 glm::vec3(-1, 1, 1),
35                 glm::vec3(-1, -1, 1),
36                 glm::vec3(1, -1, 1)
37         };
38         for (auto v: quadToTriangles(back))
39                 vertices[i++] = v;
40
41
42         const array<glm::vec3, 4> top = {
43                 glm::vec3(1, 1, -1),
44                 glm::vec3(-1, 1, -1),
45                 glm::vec3(-1, 1, 1),
46                 glm::vec3(1, 1, 1)
47         };
48         for (auto v: quadToTriangles(top))
49                 vertices[i++] = v;
50
51         const array<glm::vec3, 4> bottom = {
52                 glm::vec3(1, -1, 1),
53                 glm::vec3(-1, -1, 1),
54                 glm::vec3(-1, -1, -1),
55                 glm::vec3(1, -1, -1)
56         };
57         for (auto v: quadToTriangles(bottom))
58                 vertices[i++] = v;
59
60         const array<glm::vec3, 4> left = {
61                 glm::vec3(-1, 1, 1),
62                 glm::vec3(-1, 1, -1),
63                 glm::vec3(-1, -1, -1),
64                 glm::vec3(-1, -1, 1)
65         };
66         for (auto v: quadToTriangles(left))
67                 vertices[i++] = v;
68
69         const array<glm::vec3, 4> right = {
70                 glm::vec3(1, 1, -1),
71                 glm::vec3(1, 1, 1),
72                 glm::vec3(1, -1, 1),
73                 glm::vec3(1, -1, -1)
74         };
75         for (auto v: quadToTriangles(right))
76                 vertices[i++] = v;
77
78         return vertices;
79 }