From 0408ecd5c4a890c06bd82424365df5d2630df2bd Mon Sep 17 00:00:00 2001 From: allem Date: Sun, 12 Jan 2020 12:07:35 -0500 Subject: [PATCH] add edge drawing, stereographic geometry shader for handling curved projections --- .gitmodules | 1 + vendor/toddcox | 2 +- vis/shaders/stereo-proper.gm.glsl | 25 +++++++++++++++++++++++++ vis/shaders/stereo-proper.vs.glsl | 12 ++++++++++++ vis/src/main.cpp | 19 ++++++++++++++----- 5 files changed, 53 insertions(+), 6 deletions(-) create mode 100644 vis/shaders/stereo-proper.gm.glsl create mode 100644 vis/shaders/stereo-proper.vs.glsl diff --git a/.gitmodules b/.gitmodules index ecc2720..c31f33e 100644 --- a/.gitmodules +++ b/.gitmodules @@ -7,3 +7,4 @@ [submodule "vendor/toddcox"] path = vendor/toddcox url = https://github.com/JCRaymond/toddcox-faster.git + branch = no-delete diff --git a/vendor/toddcox b/vendor/toddcox index 06c1540..7ff2e70 160000 --- a/vendor/toddcox +++ b/vendor/toddcox @@ -1 +1 @@ -Subproject commit 06c154057fdc27186ec4d1c6c22fd6f73adba468 +Subproject commit 7ff2e7026bf7ac05de308d544ffbfb618c7aec69 diff --git a/vis/shaders/stereo-proper.gm.glsl b/vis/shaders/stereo-proper.gm.glsl new file mode 100644 index 0000000..a2fd50c --- /dev/null +++ b/vis/shaders/stereo-proper.gm.glsl @@ -0,0 +1,25 @@ +#version 430 + +#define SUBS 20 + +layout(lines) in; +layout(line_strip, max_vertices = SUBS) out; + +layout(location=0) uniform mat4 proj; + +in vec4 gpos[]; +out vec4 vpos; + +vec4 stereo(vec4 v) { + return vec4(v.xyz / (1 - v.w), 1); +} + +void main() { + for (int i = 0; i < SUBS; i++) { + vpos = mix(gpos[0], gpos[1], i * 1.0f / (SUBS - 1)); + vpos = normalize(vpos); + gl_Position = proj * stereo(vpos); + EmitVertex(); + } + EndPrimitive(); +} diff --git a/vis/shaders/stereo-proper.vs.glsl b/vis/shaders/stereo-proper.vs.glsl new file mode 100644 index 0000000..c286c7e --- /dev/null +++ b/vis/shaders/stereo-proper.vs.glsl @@ -0,0 +1,12 @@ +#version 430 + +layout(location=1) uniform mat4 view; + +layout(location=0) in vec4 pos; + +out vec4 gpos; + +void main() { + gpos = view * pos; + gl_PointSize = 5; +} diff --git a/vis/src/main.cpp b/vis/src/main.cpp index 76418dc..3e486bc 100644 --- a/vis/src/main.cpp +++ b/vis/src/main.cpp @@ -69,18 +69,26 @@ int main(int argc, char *argv[]) { try { // GLuint vs = utilCompileFiles(GL_VERTEX_SHADER, {"shaders/ortho.vs.glsl"}); - GLuint vs = utilCompileFiles(GL_VERTEX_SHADER, {"shaders/stereo.vs.glsl"}); - GLuint fs = utilCompileFiles(GL_FRAGMENT_SHADER, {"shaders/one-color.fs.glsl"}); +// GLuint vs = utilCompileFiles(GL_VERTEX_SHADER, {"shaders/stereo.vs.glsl"}); +// GLuint fs = utilCompileFiles(GL_FRAGMENT_SHADER, {"shaders/one-color.fs.glsl"}); // GLuint fs = utilCompileFiles(GL_FRAGMENT_SHADER, {"shaders/w-axis-hue.fs.glsl"}); - pgm = utilLinkProgram({vs, fs}); +// pgm = utilLinkProgram({vs, fs}); + + pgm = utilLinkProgram({ + utilCompileFiles(GL_VERTEX_SHADER, {"shaders/stereo-proper.vs.glsl"}), + utilCompileFiles(GL_GEOMETRY_SHADER, {"shaders/stereo-proper.gm.glsl"}), + utilCompileFiles(GL_FRAGMENT_SHADER, {"shaders/one-color.fs.glsl"}), + }); } catch (const gl_error &e) { std::cerr << e.what() << std::endl; glfwTerminate(); exit(EXIT_FAILURE); } - auto group = tc::group::H(4); + auto group = tc::group::F4(); +// auto group = tc::group::D(4); +// auto group = tc::group::H(4); auto res = group.solve(); auto mirrors = mirror(group); @@ -128,7 +136,8 @@ int main(int argc, char *argv[]) { auto aspect = (float) width / (float) height; auto pheight = 1.4f; auto pwidth = aspect * pheight; - glm::mat4 proj = glm::ortho(-pwidth, pwidth, -pheight, pheight, -100.0f, 100.0f); + glm::mat4 proj = glm::ortho(-pwidth, pwidth, -pheight, pheight, -2.0f, 2.0f); +// glm::mat4 proj = glm::ortho(-pwidth, pwidth, -pheight, pheight, -100.0f, 100.0f); glUniformMatrix4fv(0, 1, false, glm::value_ptr(proj)); auto t = (float) glfwGetTime() / 10;