Skybox
[opengl.git] / shapes.hpp
diff --git a/shapes.hpp b/shapes.hpp
new file mode 100644 (file)
index 0000000..69520aa
--- /dev/null
@@ -0,0 +1,84 @@
+#include <array>
+#define GLM_FORCE_PURE
+#include <glm/glm.hpp>
+
+using namespace std;
+
+constexpr array<glm::vec3, 6> quadToTriangles(const array<glm::vec3, 4> quads) {
+       return {
+               quads[0],
+               quads[1],
+               quads[2],
+               quads[2],
+               quads[3],
+               quads[0]
+       };
+}
+
+constexpr const glm::vec3 foo() {
+       constexpr glm::vec3 foo(1,2,3);
+       return foo;
+}
+
+constexpr array<glm::vec3, 36> cube() {
+       int i = 0;
+       array<glm::vec3, 36> vertices;
+       
+       const array<glm::vec3, 4> front = {
+               glm::vec3(1, -1, -1),
+               glm::vec3(-1, -1, -1),
+               glm::vec3(-1, 1, -1),
+               glm::vec3(1, 1, -1)
+       };
+       
+       for (auto v: quadToTriangles(front))
+               vertices[i++] = v;
+
+       const array<glm::vec3, 4> back = {
+               glm::vec3(1, 1, 1),
+               glm::vec3(-1, 1, 1),
+               glm::vec3(-1, -1, 1),
+               glm::vec3(1, -1, 1)
+       };
+       for (auto v: quadToTriangles(back))
+               vertices[i++] = v;
+
+
+       const array<glm::vec3, 4> top = {
+               glm::vec3(1, 1, -1),
+               glm::vec3(-1, 1, -1),
+               glm::vec3(-1, 1, 1),
+               glm::vec3(1, 1, 1)
+       };
+       for (auto v: quadToTriangles(top))
+               vertices[i++] = v;
+
+       const array<glm::vec3, 4> bottom = {
+               glm::vec3(1, -1, 1),
+               glm::vec3(-1, -1, 1),
+               glm::vec3(-1, -1, -1),
+               glm::vec3(1, -1, -1)
+       };
+       for (auto v: quadToTriangles(bottom))
+               vertices[i++] = v;
+
+       const array<glm::vec3, 4> left = {
+               glm::vec3(-1, 1, 1),
+               glm::vec3(-1, 1, -1),
+               glm::vec3(-1, -1, -1),
+               glm::vec3(-1, -1, 1)
+       };
+       for (auto v: quadToTriangles(left))
+               vertices[i++] = v;
+
+       const array<glm::vec3, 4> right = {
+               glm::vec3(1, 1, -1),
+               glm::vec3(1, 1, 1),
+               glm::vec3(1, -1, 1),
+               glm::vec3(1, -1, -1)
+       };
+       for (auto v: quadToTriangles(right))
+               vertices[i++] = v;
+
+       return vertices;
+}