Load lights from model
[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, 6> plane() {
19         return quadToTriangles({
20                 glm::vec3(1, 1, 0),
21                 glm::vec3(-1, 1, 0),
22                 glm::vec3(-1, -1, 0),
23                 glm::vec3(1, -1, 0)
24         });
25 }
26
27 constexpr array<glm::vec3, 36> cube() {
28         int i = 0;
29         array<glm::vec3, 36> vertices;
30         
31         const array<glm::vec3, 4> front = {
32                 glm::vec3(1, -1, -1),
33                 glm::vec3(-1, -1, -1),
34                 glm::vec3(-1, 1, -1),
35                 glm::vec3(1, 1, -1)
36         };
37         
38         for (auto v: quadToTriangles(front))
39                 vertices[i++] = v;
40
41         const array<glm::vec3, 4> back = {
42                 glm::vec3(1, 1, 1),
43                 glm::vec3(-1, 1, 1),
44                 glm::vec3(-1, -1, 1),
45                 glm::vec3(1, -1, 1)
46         };
47         for (auto v: quadToTriangles(back))
48                 vertices[i++] = v;
49
50
51         const array<glm::vec3, 4> top = {
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(top))
58                 vertices[i++] = v;
59
60         const array<glm::vec3, 4> bottom = {
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(bottom))
67                 vertices[i++] = v;
68
69         const array<glm::vec3, 4> left = {
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(left))
76                 vertices[i++] = v;
77
78         const array<glm::vec3, 4> right = {
79                 glm::vec3(1, 1, -1),
80                 glm::vec3(1, 1, 1),
81                 glm::vec3(1, -1, 1),
82                 glm::vec3(1, -1, -1)
83         };
84         for (auto v: quadToTriangles(right))
85                 vertices[i++] = v;
86
87         return vertices;
88 }
89
90 constexpr glm::vec3 pyramid[18] = {
91         glm::vec3(0.0f, 1.0f, 0.0f),
92         glm::vec3(1.0f, -1.0f, -1.0f),
93         glm::vec3(-1.0f, -1.0f, -1.0f),
94
95         glm::vec3(0.0f, 1.0f, 0.0f),
96         glm::vec3(-1.0f, -1.0f, 1.0f),
97         glm::vec3(1.0f, -1.0f, 1.0f),
98
99         glm::vec3(0.0f, 1.0f, 0.0f),
100         glm::vec3(-1.0f, -1.0f, -1.0f),
101         glm::vec3(-1.0f, -1.0f, 1.0f),
102
103         glm::vec3(0.0f, 1.0f, 0.0f),
104         glm::vec3(1.0f, -1.0f, 1.0f),
105         glm::vec3(1.0f, -1.0f, -1.0f),
106
107         glm::vec3(1, -1, 1),
108         glm::vec3(-1, -1, 1),
109         glm::vec3(-1, -1, -1),
110         glm::vec3(-1, -1, -1),
111         glm::vec3(1, -1, -1),
112         glm::vec3(1, -1, 1)
113 };