From bd00ccf442d407c1e8b2ca79aadc8ece7d4e2fa3 Mon Sep 17 00:00:00 2001 From: allem Date: Fri, 13 Sep 2019 23:37:58 -0400 Subject: [PATCH 1/7] restructure files --- cosets/CMakeLists.txt | 5 ++-- cosets/src/coxeter.cpp | 27 +++++++++++++++++++++ cosets/src/mirrors.cpp | 15 ++++++++++++ cosets/src/{tc.cpp => util/coxeter.hpp} | 26 -------------------- cosets/src/{mirror.cpp => util/mirrors.hpp} | 16 +----------- 5 files changed, 45 insertions(+), 44 deletions(-) create mode 100644 cosets/src/coxeter.cpp create mode 100644 cosets/src/mirrors.cpp rename cosets/src/{tc.cpp => util/coxeter.hpp} (89%) rename cosets/src/{mirror.cpp => util/mirrors.hpp} (75%) diff --git a/cosets/CMakeLists.txt b/cosets/CMakeLists.txt index 5a14367..3b9bca0 100644 --- a/cosets/CMakeLists.txt +++ b/cosets/CMakeLists.txt @@ -13,7 +13,6 @@ add_custom_command( ${CMAKE_CURRENT_BINARY_DIR}/shaders ) -add_executable(coxeter src/tc.cpp) - -add_executable(mirror src/mirror.cpp) +add_executable(coxeter scr/coxeter.cpp) +add_executable(mirror src/mirrors.cpp) target_link_libraries(mirror PRIVATE glm) diff --git a/cosets/src/coxeter.cpp b/cosets/src/coxeter.cpp new file mode 100644 index 0000000..a4e3e9b --- /dev/null +++ b/cosets/src/coxeter.cpp @@ -0,0 +1,27 @@ +#include "util/coxeter.hpp" + +int main(int argc, char *argv[]) { + std::vector> ids{ + {0, 0}, + {1, 1}, + {2, 2}, + {0, 1, 0, 1, 0, 1, 0, 1}, + {1, 2, 1, 2, 1, 2}, + {0, 2, 0, 2} + }; + + Table *table = solve(3, {0, 1}, ids); + + std::cout << table->size() << std::endl; + std::cout << *table << std::endl; + + for (const auto &v : table->words()) { + std::cout << "[ "; + for (auto e : v) { + std::cout << e << " "; + } + std::cout << "]\n"; + } + + return 0; +} diff --git a/cosets/src/mirrors.cpp b/cosets/src/mirrors.cpp new file mode 100644 index 0000000..aa9d2b4 --- /dev/null +++ b/cosets/src/mirrors.cpp @@ -0,0 +1,15 @@ +#include "util/mirrors.hpp" + +int main(int argc, char *argv[]) { + auto normals = mirror<3>({ + {}, + {4}, + {2, 3} + }); + + for (const auto &normal : normals) { + std::cout << glm::to_string(normal) << std::endl; + } + + return 0; +} \ No newline at end of file diff --git a/cosets/src/tc.cpp b/cosets/src/util/coxeter.hpp similarity index 89% rename from cosets/src/tc.cpp rename to cosets/src/util/coxeter.hpp index 013714e..19af6e2 100644 --- a/cosets/src/tc.cpp +++ b/cosets/src/util/coxeter.hpp @@ -195,29 +195,3 @@ std::ostream &operator<<(std::ostream &out, const Table &table) { return out; } - -int main(int argc, char *argv[]) { - std::vector> ids{ - {0, 0}, - {1, 1}, - {2, 2}, - {0, 1, 0, 1, 0, 1, 0, 1}, - {1, 2, 1, 2, 1, 2}, - {0, 2, 0, 2} - }; - - Table *table = solve(3, {0, 1}, ids); - - std::cout << table->size() << std::endl; - std::cout << *table << std::endl; - - for (const auto &v : table->words()) { - std::cout << "[ "; - for (auto e : v) { - std::cout << e << " "; - } - std::cout << "]\n"; - } - - return 0; -} diff --git a/cosets/src/mirror.cpp b/cosets/src/util/mirrors.hpp similarity index 75% rename from cosets/src/mirror.cpp rename to cosets/src/util/mirrors.hpp index 098e5c4..06ce895 100644 --- a/cosets/src/mirror.cpp +++ b/cosets/src/util/mirrors.hpp @@ -5,7 +5,7 @@ #include #include -#include "util/numeric.hpp" +#include "numeric.hpp" template std::vector mirror(const float (&arr)[N][N]) { @@ -32,17 +32,3 @@ std::vector mirror(const float (&arr)[N][N]) { return mirrors; } - -int main(int argc, char *argv[]) { - auto normals = mirror<3>({ - {}, - {4}, - {2, 3} - }); - - for (const auto &normal : normals) { - std::cout << glm::to_string(normal) << std::endl; - } - - return 0; -} \ No newline at end of file From f8a46c218db03e1c1548c285c1e4f6027101e654 Mon Sep 17 00:00:00 2001 From: allem Date: Sat, 14 Sep 2019 00:05:13 -0400 Subject: [PATCH 2/7] utilities; fix cmakelists typo --- cosets/src/util/numeric.hpp | 42 +++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/cosets/src/util/numeric.hpp b/cosets/src/util/numeric.hpp index b4ab66c..d4a749f 100644 --- a/cosets/src/util/numeric.hpp +++ b/cosets/src/util/numeric.hpp @@ -1,6 +1,8 @@ #pragma once #include +#include +#include glm::vec4 round(glm::vec4 f, int prec) { auto dec = (float) pow(10, prec); @@ -15,3 +17,43 @@ float dot(int n, glm::vec4 a, glm::vec4 b) { } return sum; } + +glm::vec4 project(glm::vec4 vec, glm::vec4 target) { + return glm::dot(vec, target) / glm::dot(target, target) * target; +} + +glm::vec4 reflect(glm::vec4 vec, glm::vec4 axis) { + return vec - 2.0f * project(vec, axis); +} + +glm::vec4 gram_schmidt_last(std::vector vecs) { + int N = vecs.size(); + for (int i = 0; i < N; ++i) { + for (int j = 0; j < i; ++j) { + vecs[i] -= project(vecs[i], vecs[j]); + } + } + + return glm::normalize(vecs[N - 1]); +} + +glm::vec4 barycentric(std::vector basis, std::vector coords) { + glm::vec4 res{}; + int N = std::min(basis.size(), coords.size()); + for (int i = 0; i < N; ++i) { + res += basis[i] * coords[i]; + } + return res; +} + +std::vector plane_intersections(std::vector normals) { + int N = normals.size(); + std::vector results(N); + + for (int i = 0; i < N; ++i) { + results[i] = gram_schmidt_last(normals); + std::rotate(normals.begin(), normals.begin() + 1, normals.end()); + } + + return results; +} From 1b50b04c1ced15396d3be41854b08d73d2dc7ead Mon Sep 17 00:00:00 2001 From: allem Date: Sat, 14 Sep 2019 00:05:55 -0400 Subject: [PATCH 3/7] use multiplicities class; fix cmakelists typo --- cosets/CMakeLists.txt | 2 +- cosets/src/mirrors.cpp | 9 ++++----- cosets/src/util/coxeter.hpp | 32 ++++++++++++++++++++++++++++++++ cosets/src/util/mirrors.hpp | 5 +++-- 4 files changed, 40 insertions(+), 8 deletions(-) diff --git a/cosets/CMakeLists.txt b/cosets/CMakeLists.txt index 3b9bca0..4e40d31 100644 --- a/cosets/CMakeLists.txt +++ b/cosets/CMakeLists.txt @@ -13,6 +13,6 @@ add_custom_command( ${CMAKE_CURRENT_BINARY_DIR}/shaders ) -add_executable(coxeter scr/coxeter.cpp) +add_executable(coxeter src/coxeter.cpp) add_executable(mirror src/mirrors.cpp) target_link_libraries(mirror PRIVATE glm) diff --git a/cosets/src/mirrors.cpp b/cosets/src/mirrors.cpp index aa9d2b4..51ba1d6 100644 --- a/cosets/src/mirrors.cpp +++ b/cosets/src/mirrors.cpp @@ -1,11 +1,10 @@ #include "util/mirrors.hpp" int main(int argc, char *argv[]) { - auto normals = mirror<3>({ - {}, - {4}, - {2, 3} - }); + auto normals = mirror<3>(Multiplicites<3>({ + {0, 1, 4}, + {1, 2, 3} + })); for (const auto &normal : normals) { std::cout << glm::to_string(normal) << std::endl; diff --git a/cosets/src/util/coxeter.hpp b/cosets/src/util/coxeter.hpp index 19af6e2..d8e0f4e 100644 --- a/cosets/src/util/coxeter.hpp +++ b/cosets/src/util/coxeter.hpp @@ -4,6 +4,38 @@ #include #include +struct Mult { + int a, b, mult; +}; + +template +struct Multiplicites { + std::vector mults; + + explicit Multiplicites(std::vector vals) { + mults = std::vector(N * (N - 1) / 2, 2); + for (const auto &mult : vals) { + set(mult.a, mult.b, mult.mult); + } + } + + void set(int a, int b, int mult) { + if (a > N or b > N) throw std::logic_error("mirror does not exist"); + if (a == b) throw std::logic_error("cannot compare mirror to itself"); + if (a < b) std::swap(a, b); // a is bigger + + mults[a + b] = mult; + } + + int get(int a, int b) const { + if (a > N or b > N) throw std::logic_error("mirror does not exist"); + if (a == b) throw std::logic_error("cannot compare mirror to itself"); + if (a < b) std::swap(a, b); // a is bigger + + return mults[a + b]; + } +}; + struct Table { int N; diff --git a/cosets/src/util/mirrors.hpp b/cosets/src/util/mirrors.hpp index 06ce895..fc18e37 100644 --- a/cosets/src/util/mirrors.hpp +++ b/cosets/src/util/mirrors.hpp @@ -6,9 +6,10 @@ #include #include "numeric.hpp" +#include "coxeter.hpp" template -std::vector mirror(const float (&arr)[N][N]) { +std::vector mirror(const Multiplicites &mults) { static_assert(1 <= N and N <= 4, "Vector size is unsupported"); std::vector mirrors{}; @@ -16,7 +17,7 @@ std::vector mirror(const float (&arr)[N][N]) { glm::vec4 vp{}; for (int m = 0; m < p; ++m) { glm::vec4 vq = mirrors[m]; - vp[m] = (cos(M_PI / arr[p][m]) - dot(m, vp, vq)) / vq[m]; + vp[m] = (cos(M_PI / mults.get(p, m)) - dot(m, vp, vq)) / vq[m]; } vp[p] = std::sqrt(1 - glm::dot(vp, vp)); From 476695748b2848b869c67aaae7bbcce625cb18af Mon Sep 17 00:00:00 2001 From: allem Date: Sat, 14 Sep 2019 00:07:12 -0400 Subject: [PATCH 4/7] code tidying --- cosets/src/util/coxeter.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/cosets/src/util/coxeter.hpp b/cosets/src/util/coxeter.hpp index d8e0f4e..d9e49c8 100644 --- a/cosets/src/util/coxeter.hpp +++ b/cosets/src/util/coxeter.hpp @@ -12,7 +12,7 @@ template struct Multiplicites { std::vector mults; - explicit Multiplicites(std::vector vals) { + explicit Multiplicites(const std::vector &vals) { mults = std::vector(N * (N - 1) / 2, 2); for (const auto &mult : vals) { set(mult.a, mult.b, mult.mult); @@ -27,7 +27,7 @@ struct Multiplicites { mults[a + b] = mult; } - int get(int a, int b) const { + [[nodiscard]] int get(int a, int b) const { if (a > N or b > N) throw std::logic_error("mirror does not exist"); if (a == b) throw std::logic_error("cannot compare mirror to itself"); if (a < b) std::swap(a, b); // a is bigger From 1e5a21da07cfb41f96fe8deb9e95caf374bd22ed Mon Sep 17 00:00:00 2001 From: allem Date: Sat, 14 Sep 2019 00:14:36 -0400 Subject: [PATCH 5/7] missing pragma once --- cosets/src/util/coxeter.hpp | 2 ++ cosets/src/util/mirrors.hpp | 2 ++ 2 files changed, 4 insertions(+) diff --git a/cosets/src/util/coxeter.hpp b/cosets/src/util/coxeter.hpp index d9e49c8..054a49f 100644 --- a/cosets/src/util/coxeter.hpp +++ b/cosets/src/util/coxeter.hpp @@ -1,3 +1,5 @@ +#pragma once + #include #include #include diff --git a/cosets/src/util/mirrors.hpp b/cosets/src/util/mirrors.hpp index fc18e37..6a629bd 100644 --- a/cosets/src/util/mirrors.hpp +++ b/cosets/src/util/mirrors.hpp @@ -1,3 +1,5 @@ +#pragma once + #include #include #include From 67c03a67da7f3385b94722a577a608d7d1422792 Mon Sep 17 00:00:00 2001 From: allem Date: Sat, 14 Sep 2019 00:41:33 -0400 Subject: [PATCH 6/7] vertex enumeration working, but orientation is wrong. --- cosets/CMakeLists.txt | 2 ++ cosets/src/main.cpp | 26 ++++++++-------- cosets/src/mesh.cpp | 16 ++++++++++ cosets/src/util/mesh.hpp | 60 +++++++++++++++++++++++++++++++++++++ cosets/src/util/numeric.hpp | 2 +- 5 files changed, 91 insertions(+), 15 deletions(-) create mode 100644 cosets/src/mesh.cpp create mode 100644 cosets/src/util/mesh.hpp diff --git a/cosets/CMakeLists.txt b/cosets/CMakeLists.txt index 4e40d31..e157ee6 100644 --- a/cosets/CMakeLists.txt +++ b/cosets/CMakeLists.txt @@ -16,3 +16,5 @@ add_custom_command( add_executable(coxeter src/coxeter.cpp) add_executable(mirror src/mirrors.cpp) target_link_libraries(mirror PRIVATE glm) +add_executable(mesh src/mesh.cpp) +target_link_libraries(mesh PRIVATE glm) diff --git a/cosets/src/main.cpp b/cosets/src/main.cpp index de0e007..c7e7c88 100644 --- a/cosets/src/main.cpp +++ b/cosets/src/main.cpp @@ -5,6 +5,9 @@ #include #include #include +#include + +#include "util/mesh.hpp" using namespace std; @@ -13,7 +16,7 @@ class CosetsWindow : public Window { GLuint tri; GLuint verts; - static const unsigned VERTS_N = 8; + std::vector verts_data; public: void init() override { @@ -29,21 +32,16 @@ public: program = build_program("main", vs, fs); - glm::vec4 verts_data[VERTS_N]{ - {+0.5, +0.5, +0.5, +0.0}, - {+0.5, -0.5, +0.5, +0.0}, - {-0.5, -0.5, +0.5, +0.0}, - {-0.5, +0.5, +0.5, +0.0}, - - {+0.5, +0.5, +0.5, -0.5}, - {+0.5, -0.5, +0.5, -0.5}, - {-0.5, -0.5, +0.5, +0.5}, - {-0.5, +0.5, +0.5, +0.5}, - }; + verts_data = vertices<3>({}, Multiplicites<3>({ + {0, 1, 4}, + {1, 2, 3} + }), { + 2.0f, .05f, 0.05f + }); glGenBuffers(1, &verts); glBindBuffer(GL_ARRAY_BUFFER, verts); - glBufferData(GL_ARRAY_BUFFER, sizeof(float) * 4 * VERTS_N, verts_data, GL_STATIC_DRAW); + glBufferData(GL_ARRAY_BUFFER, sizeof(glm::vec4) * verts_data.size(), &verts_data[0], GL_STATIC_DRAW); glGenVertexArrays(1, &tri); @@ -78,7 +76,7 @@ public: glPointSize(10.f); glBindVertexArray(tri); - glDrawArrays(GL_POINTS, 0, VERTS_N); + glDrawArrays(GL_POINTS, 0, verts_data.size()); swapbuffers(); } diff --git a/cosets/src/mesh.cpp b/cosets/src/mesh.cpp new file mode 100644 index 0000000..eb26070 --- /dev/null +++ b/cosets/src/mesh.cpp @@ -0,0 +1,16 @@ +#include "util/mesh.hpp" + +int main(int argc, char *argv[]) { + auto vs = vertices<3>({}, Multiplicites<3>({ + {0, 1, 4}, + {1, 2, 3} + }), { + 1.0f, 1.0f, 1.0f + }); + + for (const auto &v : vs) { + std::cout << glm::to_string(v) << std::endl; + } + + return 0; +} \ No newline at end of file diff --git a/cosets/src/util/mesh.hpp b/cosets/src/util/mesh.hpp new file mode 100644 index 0000000..5879526 --- /dev/null +++ b/cosets/src/util/mesh.hpp @@ -0,0 +1,60 @@ +#pragma once + +#include "coxeter.hpp" +#include "mirrors.hpp" +#include "numeric.hpp" + +#include + +template +std::vector +vertices(const std::vector &subgens, const Multiplicites &mults, const float (&coords)[N]) { + std::vector> rels{}; + rels.reserve(N + N * (N - 1) / 2); + + for (int i = 0; i < N; ++i) { + rels.push_back({i, i}); + } + for (int a = 0; a < N; ++a) { + for (int b = 0; b < a; ++b) { + int mult = mults.get(a, b); + + std::vector rel{}; + for (int i = 0; i < mult; ++i) { + rel.push_back(a); + rel.push_back(b); + } + rels.push_back(rel); + } + } + + Table *table = solve(N, subgens, rels); + +// std::cout << table->size() << std::endl; +// std::cout << *table << std::endl; + +// for (const auto &v : table->words()) { +// std::cout << "[ "; +// for (auto e : v) { +// std::cout << e << " "; +// } +// std::cout << "]\n"; +// } + + const std::vector &normals = mirror<3>(mults); + const std::vector &corners = plane_intersections(normals); + const std::vector coords_vec(coords, coords + N); + const glm::vec4 &identity = glm::normalize(barycentric(corners, coords_vec)); + + std::vector verts(table->size()); + + for (const auto &word : table->words()) { + glm::vec4 vert = identity; + for (const auto &gen : word) { + vert = reflect(vert, normals[gen]); + } + verts.push_back(vert); + } + + return verts; +} \ No newline at end of file diff --git a/cosets/src/util/numeric.hpp b/cosets/src/util/numeric.hpp index d4a749f..b787c08 100644 --- a/cosets/src/util/numeric.hpp +++ b/cosets/src/util/numeric.hpp @@ -51,7 +51,7 @@ std::vector plane_intersections(std::vector normals) { std::vector results(N); for (int i = 0; i < N; ++i) { - results[i] = gram_schmidt_last(normals); + results[i] = glm::normalize(gram_schmidt_last(normals)); std::rotate(normals.begin(), normals.begin() + 1, normals.end()); } From fb1a22898b12446d50cabe317f5a3614f8fbc925 Mon Sep 17 00:00:00 2001 From: allem Date: Sat, 14 Sep 2019 01:49:01 -0400 Subject: [PATCH 7/7] render vertex points and fundamental region --- cosets/CMakeLists.txt | 4 +++- cosets/src/main.cpp | 29 ++++++++++++++++++----------- cosets/src/shaders/main.fs.glsl | 8 ++++++-- cosets/src/shaders/main.vs.glsl | 2 +- cosets/src/util/mesh.hpp | 6 +++++- cosets/src/util/numeric.hpp | 4 ++-- cosets/src/util/window.hpp | 1 + 7 files changed, 36 insertions(+), 18 deletions(-) diff --git a/cosets/CMakeLists.txt b/cosets/CMakeLists.txt index e157ee6..5e078ec 100644 --- a/cosets/CMakeLists.txt +++ b/cosets/CMakeLists.txt @@ -7,14 +7,16 @@ target_link_libraries(${PROJECT_NAME} PRIVATE glad glm glfw) add_custom_command( - TARGET cosets POST_BUILD + TARGET ${PROJECT_NAME} POST_BUILD COMMAND ${CMAKE_COMMAND} -E copy_directory ${CMAKE_CURRENT_SOURCE_DIR}/src/shaders ${CMAKE_CURRENT_BINARY_DIR}/shaders ) add_executable(coxeter src/coxeter.cpp) + add_executable(mirror src/mirrors.cpp) target_link_libraries(mirror PRIVATE glm) + add_executable(mesh src/mesh.cpp) target_link_libraries(mesh PRIVATE glm) diff --git a/cosets/src/main.cpp b/cosets/src/main.cpp index c7e7c88..0ac8492 100644 --- a/cosets/src/main.cpp +++ b/cosets/src/main.cpp @@ -33,10 +33,10 @@ public: program = build_program("main", vs, fs); verts_data = vertices<3>({}, Multiplicites<3>({ - {0, 1, 4}, + {0, 1, 5}, {1, 2, 3} }), { - 2.0f, .05f, 0.05f + 10, 1, 1 }); glGenBuffers(1, &verts); @@ -58,25 +58,32 @@ public: glViewport(0, 0, w, h); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - const glm::mat4 id = glm::mat4(1); - const glm::vec3 ax = glm::vec3(0, 0, 1); - double t = glfwGetTime(); - float angle = (float) t; + const auto id = glm::mat4(1); + const auto ax_1 = glm::vec3(0, 0, 1); + const auto ax_2 = glm::vec3(.5, 1, 0.2); + const auto t = glfwGetTime(); + const auto angle = (float) t / 2; - float ar = (float) w / (float) h; + const float sc = 1.5f; + const float ar = (float) w / (float) h; - const glm::mat4 proj = glm::ortho(-ar, ar, -1.f, 1.f, -1.f, 1.f); - const glm::mat4 view = glm::rotate(id, angle, ax); + const glm::mat4 proj = glm::ortho(-ar * sc, ar * sc, -sc, sc, -10.f, 10.f); + const glm::mat4 view = glm::rotate(id, angle, ax_1) * glm::rotate(id, angle, ax_2); const glm::mat4 mat = proj * view; glUseProgram(program); - glUniformMatrix4fv(0, 1, false, glm::value_ptr(mat)); + glUniformMatrix4fv(1, 1, false, glm::value_ptr(mat)); glEnable(GL_DEPTH_TEST); glEnable(GL_POINT_SMOOTH); + glEnable(GL_BLEND); + glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glPointSize(10.f); glBindVertexArray(tri); - glDrawArrays(GL_POINTS, 0, verts_data.size()); + glUniform4f(0, 1, 1, 1, 1); + glDrawArrays(GL_POINTS, 0, verts_data.size() - 3); + glUniform4f(0, 1, 1, 1, .1); + glDrawArrays(GL_TRIANGLES, verts_data.size() - 3, 3); swapbuffers(); } diff --git a/cosets/src/shaders/main.fs.glsl b/cosets/src/shaders/main.fs.glsl index 25a8486..bf2946f 100644 --- a/cosets/src/shaders/main.fs.glsl +++ b/cosets/src/shaders/main.fs.glsl @@ -1,7 +1,11 @@ -#version 400 +#version 440 core + +uniform vec4 color; in vec4 v; +out vec4 fcolor; + vec3 hsv2rgb(vec3 c) { vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www); @@ -9,5 +13,5 @@ vec3 hsv2rgb(vec3 c) { } void main(){ - gl_FragColor = vec4(hsv2rgb(vec3(v.w, 1, 1)), 0); + fcolor = color; } diff --git a/cosets/src/shaders/main.vs.glsl b/cosets/src/shaders/main.vs.glsl index 01f2172..136fec0 100644 --- a/cosets/src/shaders/main.vs.glsl +++ b/cosets/src/shaders/main.vs.glsl @@ -1,4 +1,4 @@ -#version 400 +#version 440 core uniform mat4 proj; diff --git a/cosets/src/util/mesh.hpp b/cosets/src/util/mesh.hpp index 5879526..9380bb6 100644 --- a/cosets/src/util/mesh.hpp +++ b/cosets/src/util/mesh.hpp @@ -46,7 +46,7 @@ vertices(const std::vector &subgens, const Multiplicites &mults, const f const std::vector coords_vec(coords, coords + N); const glm::vec4 &identity = glm::normalize(barycentric(corners, coords_vec)); - std::vector verts(table->size()); + std::vector verts{}; for (const auto &word : table->words()) { glm::vec4 vert = identity; @@ -56,5 +56,9 @@ vertices(const std::vector &subgens, const Multiplicites &mults, const f verts.push_back(vert); } + for (const auto &e : corners) { + verts.push_back(e * 1.1f); + } + return verts; } \ No newline at end of file diff --git a/cosets/src/util/numeric.hpp b/cosets/src/util/numeric.hpp index b787c08..663be4a 100644 --- a/cosets/src/util/numeric.hpp +++ b/cosets/src/util/numeric.hpp @@ -43,7 +43,7 @@ glm::vec4 barycentric(std::vector basis, std::vector coords) { for (int i = 0; i < N; ++i) { res += basis[i] * coords[i]; } - return res; + return glm::normalize(res); } std::vector plane_intersections(std::vector normals) { @@ -51,8 +51,8 @@ std::vector plane_intersections(std::vector normals) { std::vector results(N); for (int i = 0; i < N; ++i) { - results[i] = glm::normalize(gram_schmidt_last(normals)); std::rotate(normals.begin(), normals.begin() + 1, normals.end()); + results[i] = gram_schmidt_last(normals); } return results; diff --git a/cosets/src/util/window.hpp b/cosets/src/util/window.hpp index a90adb1..49dc274 100644 --- a/cosets/src/util/window.hpp +++ b/cosets/src/util/window.hpp @@ -31,6 +31,7 @@ public: glfwWindowHint(GLFW_CONTEXT_VERSION_MAJOR, _gl_major); glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, _gl_minor); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); + glfwWindowHint(GLFW_ALPHA_BITS, 8); _window = glfwCreateWindow(640, 480, "GLFW App", nullptr, nullptr);