From 2277036c020213a953a5b1178d488951ca13f289 Mon Sep 17 00:00:00 2001 From: David Date: Sun, 15 Mar 2020 12:53:14 -0400 Subject: [PATCH] more templates in point --- vis/include/mirror.hpp | 6 ++--- vis/src/main.cpp | 50 +++++++++++++++++++++++------------------- 2 files changed, 31 insertions(+), 25 deletions(-) diff --git a/vis/include/mirror.hpp b/vis/include/mirror.hpp index 2663daf..c7fc67b 100644 --- a/vis/include/mirror.hpp +++ b/vis/include/mirror.hpp @@ -161,15 +161,15 @@ V gram_schmidt_last(std::vector vecs) { return normalized(vecs[vecs.size() - 1]); } -template -V barycentric(const std::vector &basis, const std::vector &coords) { +template +V barycentric(const std::vector &basis, const C &coords) { V res{}; int N = std::min(basis.size(), coords.size()); for (int i = 0; i < N; ++i) { res += basis[i] * coords[i]; } - return normalized(res); + return res; } template diff --git a/vis/src/main.cpp b/vis/src/main.cpp index e4311e3..bdbedf7 100644 --- a/vis/src/main.cpp +++ b/vis/src/main.cpp @@ -68,7 +68,8 @@ auto hull(const tc::Group &group, T begin, T end) { return parts; } -std::vector points(const tc::Group &group, const std::vector &coords) { +template +std::vector points(const tc::Group &group, const C &coords) { auto cosets = group.solve(); auto mirrors = mirror<5>(group); @@ -118,14 +119,14 @@ struct Slice { Slice(Slice &&) noexcept = default; - void draw() { + void draw() const { vao.bound([&]() { glDrawArrays(GL_POINTS, 0, ibo.count() * N); }); } - template - static Slice build(const tc::Group &g, const std::vector &coords, vec4 color, T begin, T end) { + template + static Slice build(const tc::Group &g, const C &coords, vec4 color, T begin, T end) { Slice res(GL_POINTS, color); res.vbo.put(points(g, coords)); @@ -158,18 +159,25 @@ void run(GLFWwindow *window) { auto group = tc::schlafli({5, 3, 3, 2}); const auto combos = Combos({0, 1, 2, 3, 4}, 3); + const auto last = Combos({0,2,3,4},3); - auto white = Slice<4>::build( - group, - {0.3f, 0.1f, 0.1f, 0.1f, 0.05f}, - {0.9f, 0.9f, 0.9f, 1.0f}, - combos.begin(), combos.end()); - - auto black = Slice<4>::build( - group, - {1.0f, 0.1f, 0.1f, 0.1f, 0.5f}, - {0.3f, 0.3f, 0.3f, 1.0f}, - combos.begin()++, combos.end()); + auto slices = { + Slice<4>::build( + group, + (vec5) {0.5, 0.05, 0.05, 0.05, 0.025}, + {0.9f, 0.9f, 0.9f, 1.0f}, + combos.begin(), combos.end()), + Slice<4>::build( + group, + (vec5) {0.5, 0.05, 0.05, 0.05, 0.025} * 2.0, + {0.3f, 0.3f, 0.3f, 1.0f}, + combos.begin()++, combos.end()), + Slice<4>::build( + group, + (vec5) {0.5, 0.05, 0.05, 0.05, 0.2} * 1.2, + {0.3f, 0.3f, 0.3f, 1.0f}, + last.begin(), last.end()), + }; auto ubo = cgl::Buffer(); glBindBufferBase(GL_UNIFORM_BUFFER, 1, ubo); @@ -188,13 +196,11 @@ void run(GLFWwindow *window) { glLineWidth(1.5); slice_pipe.bound([&]() { - glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 1, white.vbo); - glProgramUniform4fv(sh.solid, 2, 1, &white.color.front()); - white.draw(); - - glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 1, black.vbo); - glProgramUniform4fv(sh.solid, 2, 1, &black.color.front()); - black.draw(); + for (const auto &slice : slices) { + glBindBufferBase(GL_SHADER_STORAGE_BUFFER, 1, slice.vbo); + glProgramUniform4fv(sh.solid, 2, 1, &slice.color.front()); + slice.draw(); + } }); glfwSwapInterval(2);