From fb1a22898b12446d50cabe317f5a3614f8fbc925 Mon Sep 17 00:00:00 2001 From: allem Date: Sat, 14 Sep 2019 01:49:01 -0400 Subject: [PATCH] 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);