Skybox
[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 const glm::vec3 foo() {
19         constexpr glm::vec3 foo(1,2,3);
20         return foo;
21 }
22
23 constexpr array<glm::vec3, 36> cube() {
24         int i = 0;
25         array<glm::vec3, 36> vertices;
26         
27         const array<glm::vec3, 4> front = {
28                 glm::vec3(1, -1, -1),
29                 glm::vec3(-1, -1, -1),
30                 glm::vec3(-1, 1, -1),
31                 glm::vec3(1, 1, -1)
32         };
33         
34         for (auto v: quadToTriangles(front))
35                 vertices[i++] = v;
36
37         const array<glm::vec3, 4> back = {
38                 glm::vec3(1, 1, 1),
39                 glm::vec3(-1, 1, 1),
40                 glm::vec3(-1, -1, 1),
41                 glm::vec3(1, -1, 1)
42         };
43         for (auto v: quadToTriangles(back))
44                 vertices[i++] = v;
45
46
47         const array<glm::vec3, 4> top = {
48                 glm::vec3(1, 1, -1),
49                 glm::vec3(-1, 1, -1),
50                 glm::vec3(-1, 1, 1),
51                 glm::vec3(1, 1, 1)
52         };
53         for (auto v: quadToTriangles(top))
54                 vertices[i++] = v;
55
56         const array<glm::vec3, 4> bottom = {
57                 glm::vec3(1, -1, 1),
58                 glm::vec3(-1, -1, 1),
59                 glm::vec3(-1, -1, -1),
60                 glm::vec3(1, -1, -1)
61         };
62         for (auto v: quadToTriangles(bottom))
63                 vertices[i++] = v;
64
65         const array<glm::vec3, 4> left = {
66                 glm::vec3(-1, 1, 1),
67                 glm::vec3(-1, 1, -1),
68                 glm::vec3(-1, -1, -1),
69                 glm::vec3(-1, -1, 1)
70         };
71         for (auto v: quadToTriangles(left))
72                 vertices[i++] = v;
73
74         const array<glm::vec3, 4> right = {
75                 glm::vec3(1, 1, -1),
76                 glm::vec3(1, 1, 1),
77                 glm::vec3(1, -1, 1),
78                 glm::vec3(1, -1, -1)
79         };
80         for (auto v: quadToTriangles(right))
81                 vertices[i++] = v;
82
83         return vertices;
84 }