From 0b874822763776320dc9d1426dca328d721c8cc9 Mon Sep 17 00:00:00 2001 From: allem Date: Thu, 20 Dec 2018 22:46:58 -0500 Subject: [PATCH] cube and tesseract frame toggles, rotation experiments --- simplex/shaders/sect.geom | 6 +- simplex/shaders/wire.frag | 4 +- simplex/shaders/wire.geom | 6 +- simplex/src/main.cpp | 112 ++++++++++++++++++++++++++------------ 4 files changed, 88 insertions(+), 40 deletions(-) diff --git a/simplex/shaders/sect.geom b/simplex/shaders/sect.geom index 7ce791c..ec3814f 100644 --- a/simplex/shaders/sect.geom +++ b/simplex/shaders/sect.geom @@ -9,6 +9,8 @@ layout(std430, binding=1) buffer Positions { layout(std140, binding=1) uniform Matrices { mat4 model; + vec4 offset; + mat4 view; mat4 proj; }; @@ -19,13 +21,13 @@ out vec4 pos; void emit(vec4 v) { pos = v; - gl_Position = proj * view * vec4(v.xyz, -v.w + 3); + gl_Position = proj * view * vec4(v.xyz, 1); EmitVertex(); } void main() { vec4 pos4[4]; - for(int i = 0; i < 4; ++i) pos4[i] = model * verts[inds[0][i]]; + for(int i = 0; i < 4; ++i) pos4[i] = offset + model * verts[inds[0][i]]; int lo[4], L = 0; int hi[4], H = 0; diff --git a/simplex/shaders/wire.frag b/simplex/shaders/wire.frag index 3ae86ba..9a1065e 100644 --- a/simplex/shaders/wire.frag +++ b/simplex/shaders/wire.frag @@ -15,5 +15,7 @@ void main() { float s = 1; float v = smoothstep(3, -3, pos.z) / 2; - fcolor = vec4(hsv2rgb(vec3(h, s, v)), 1); + vec3 hsv = vec3(h, s, v); + + fcolor = vec4(hsv2rgb(hsv), 1); } \ No newline at end of file diff --git a/simplex/shaders/wire.geom b/simplex/shaders/wire.geom index fda5445..11f2f84 100644 --- a/simplex/shaders/wire.geom +++ b/simplex/shaders/wire.geom @@ -9,6 +9,8 @@ layout(std430, binding=1) buffer Positions { layout(std140, binding=1) uniform Matrices { mat4 model; + vec4 offset; + mat4 view; mat4 proj; }; @@ -19,13 +21,13 @@ out vec4 pos; void emit(vec4 v) { pos = v; - gl_Position = proj * view * vec4(v.xyz, -v.w + 3); + gl_Position = proj * view * vec4(v.xyz, 1 - v.w / 2); EmitVertex(); } void main() { vec4 pos4[4]; - for(int i = 0; i < 4; ++i) pos4[i] = model * verts[inds[0][i]]; + for(int i = 0; i < 4; ++i) pos4[i] = offset + model * verts[inds[0][i]]; for(int i = 0; i < 4; ++i) { for(int j = i + 1; j < 4; ++j) { diff --git a/simplex/src/main.cpp b/simplex/src/main.cpp index 5b0286e..520c606 100644 --- a/simplex/src/main.cpp +++ b/simplex/src/main.cpp @@ -16,8 +16,14 @@ #include #include +extern "C" { +__attribute__((dllexport)) DWORD NvOptimusEnablement = 0x00000001; +} + struct Matrices { glm::mat4 model; + glm::vec4 offset; + glm::mat4 view; glm::mat4 proj; }; @@ -94,44 +100,72 @@ class GLApp : public App { bool DRAW_WIRE = true; void init() override { - build_tesseract(&cell_elems, &cell_verts, {-1, -1, -1, +0}, {0.125, 0.125, 0.125, 1.125}); - build_tesseract(&cell_elems, &cell_verts, {-1, -1, +1, +0}, {0.125, 0.125, 0.125, 1.125}); - build_tesseract(&cell_elems, &cell_verts, {-1, +1, -1, +0}, {0.125, 0.125, 0.125, 1.125}); - build_tesseract(&cell_elems, &cell_verts, {-1, +1, +1, +0}, {0.125, 0.125, 0.125, 1.125}); - build_tesseract(&cell_elems, &cell_verts, {+1, -1, -1, +0}, {0.125, 0.125, 0.125, 1.125}); - build_tesseract(&cell_elems, &cell_verts, {+1, -1, +1, +0}, {0.125, 0.125, 0.125, 1.125}); - build_tesseract(&cell_elems, &cell_verts, {+1, +1, -1, +0}, {0.125, 0.125, 0.125, 1.125}); - build_tesseract(&cell_elems, &cell_verts, {+1, +1, +1, +0}, {0.125, 0.125, 0.125, 1.125}); + const bool CUBE = false; + const bool TESS = true; - build_tesseract(&cell_elems, &cell_verts, {-1, -1, +0, -1}, {0.125, 0.125, 0.875, 0.125}); - build_tesseract(&cell_elems, &cell_verts, {-1, -1, +0, +1}, {0.125, 0.125, 0.875, 0.125}); - build_tesseract(&cell_elems, &cell_verts, {-1, +1, +0, -1}, {0.125, 0.125, 0.875, 0.125}); - build_tesseract(&cell_elems, &cell_verts, {-1, +1, +0, +1}, {0.125, 0.125, 0.875, 0.125}); - build_tesseract(&cell_elems, &cell_verts, {+1, -1, +0, -1}, {0.125, 0.125, 0.875, 0.125}); - build_tesseract(&cell_elems, &cell_verts, {+1, -1, +0, +1}, {0.125, 0.125, 0.875, 0.125}); - build_tesseract(&cell_elems, &cell_verts, {+1, +1, +0, -1}, {0.125, 0.125, 0.875, 0.125}); - build_tesseract(&cell_elems, &cell_verts, {+1, +1, +0, +1}, {0.125, 0.125, 0.875, 0.125}); + //region tesseract frame + if (TESS) { + build_tesseract(&cell_elems, &cell_verts, {-0.875, -0.875, -0.875, +0.00}, {0.125, 0.125, 0.125, 1.000}); + build_tesseract(&cell_elems, &cell_verts, {-0.875, -0.875, +0.875, +0.00}, {0.125, 0.125, 0.125, 1.000}); + build_tesseract(&cell_elems, &cell_verts, {-0.875, +0.875, -0.875, +0.00}, {0.125, 0.125, 0.125, 1.000}); + build_tesseract(&cell_elems, &cell_verts, {-0.875, +0.875, +0.875, +0.00}, {0.125, 0.125, 0.125, 1.000}); + build_tesseract(&cell_elems, &cell_verts, {+0.875, -0.875, -0.875, +0.00}, {0.125, 0.125, 0.125, 1.000}); + build_tesseract(&cell_elems, &cell_verts, {+0.875, -0.875, +0.875, +0.00}, {0.125, 0.125, 0.125, 1.000}); + build_tesseract(&cell_elems, &cell_verts, {+0.875, +0.875, -0.875, +0.00}, {0.125, 0.125, 0.125, 1.000}); + build_tesseract(&cell_elems, &cell_verts, {+0.875, +0.875, +0.875, +0.00}, {0.125, 0.125, 0.125, 1.000}); - build_tesseract(&cell_elems, &cell_verts, {-1, +0, -1, -1}, {0.125, 0.875, 0.125, 0.125}); - build_tesseract(&cell_elems, &cell_verts, {-1, +0, -1, +1}, {0.125, 0.875, 0.125, 0.125}); - build_tesseract(&cell_elems, &cell_verts, {-1, +0, +1, -1}, {0.125, 0.875, 0.125, 0.125}); - build_tesseract(&cell_elems, &cell_verts, {-1, +0, +1, +1}, {0.125, 0.875, 0.125, 0.125}); - build_tesseract(&cell_elems, &cell_verts, {+1, +0, -1, -1}, {0.125, 0.875, 0.125, 0.125}); - build_tesseract(&cell_elems, &cell_verts, {+1, +0, -1, +1}, {0.125, 0.875, 0.125, 0.125}); - build_tesseract(&cell_elems, &cell_verts, {+1, +0, +1, -1}, {0.125, 0.875, 0.125, 0.125}); - build_tesseract(&cell_elems, &cell_verts, {+1, +0, +1, +1}, {0.125, 0.875, 0.125, 0.125}); + build_tesseract(&cell_elems, &cell_verts, {-0.875, -0.875, +0.00, -0.875}, {0.125, 0.125, 0.750, 0.125}); + build_tesseract(&cell_elems, &cell_verts, {-0.875, -0.875, +0.00, +0.875}, {0.125, 0.125, 0.750, 0.125}); + build_tesseract(&cell_elems, &cell_verts, {-0.875, +0.875, +0.00, -0.875}, {0.125, 0.125, 0.750, 0.125}); + build_tesseract(&cell_elems, &cell_verts, {-0.875, +0.875, +0.00, +0.875}, {0.125, 0.125, 0.750, 0.125}); + build_tesseract(&cell_elems, &cell_verts, {+0.875, -0.875, +0.00, -0.875}, {0.125, 0.125, 0.750, 0.125}); + build_tesseract(&cell_elems, &cell_verts, {+0.875, -0.875, +0.00, +0.875}, {0.125, 0.125, 0.750, 0.125}); + build_tesseract(&cell_elems, &cell_verts, {+0.875, +0.875, +0.00, -0.875}, {0.125, 0.125, 0.750, 0.125}); + build_tesseract(&cell_elems, &cell_verts, {+0.875, +0.875, +0.00, +0.875}, {0.125, 0.125, 0.750, 0.125}); - build_tesseract(&cell_elems, &cell_verts, {+0, -1, -1, -1}, {0.875, 0.125, 0.125, 0.125}); - build_tesseract(&cell_elems, &cell_verts, {+0, -1, -1, +1}, {0.875, 0.125, 0.125, 0.125}); - build_tesseract(&cell_elems, &cell_verts, {+0, -1, +1, -1}, {0.875, 0.125, 0.125, 0.125}); - build_tesseract(&cell_elems, &cell_verts, {+0, -1, +1, +1}, {0.875, 0.125, 0.125, 0.125}); - build_tesseract(&cell_elems, &cell_verts, {+0, +1, -1, -1}, {0.875, 0.125, 0.125, 0.125}); - build_tesseract(&cell_elems, &cell_verts, {+0, +1, -1, +1}, {0.875, 0.125, 0.125, 0.125}); - build_tesseract(&cell_elems, &cell_verts, {+0, +1, +1, -1}, {0.875, 0.125, 0.125, 0.125}); - build_tesseract(&cell_elems, &cell_verts, {+0, +1, +1, +1}, {0.875, 0.125, 0.125, 0.125}); + build_tesseract(&cell_elems, &cell_verts, {-0.875, +0.00, -0.875, -0.875}, {0.125, 0.750, 0.125, 0.125}); + build_tesseract(&cell_elems, &cell_verts, {-0.875, +0.00, -0.875, +0.875}, {0.125, 0.750, 0.125, 0.125}); + build_tesseract(&cell_elems, &cell_verts, {-0.875, +0.00, +0.875, -0.875}, {0.125, 0.750, 0.125, 0.125}); + build_tesseract(&cell_elems, &cell_verts, {-0.875, +0.00, +0.875, +0.875}, {0.125, 0.750, 0.125, 0.125}); + build_tesseract(&cell_elems, &cell_verts, {+0.875, +0.00, -0.875, -0.875}, {0.125, 0.750, 0.125, 0.125}); + build_tesseract(&cell_elems, &cell_verts, {+0.875, +0.00, -0.875, +0.875}, {0.125, 0.750, 0.125, 0.125}); + build_tesseract(&cell_elems, &cell_verts, {+0.875, +0.00, +0.875, -0.875}, {0.125, 0.750, 0.125, 0.125}); + build_tesseract(&cell_elems, &cell_verts, {+0.875, +0.00, +0.875, +0.875}, {0.125, 0.750, 0.125, 0.125}); + + build_tesseract(&cell_elems, &cell_verts, {+0.00, -0.875, -0.875, -0.875}, {0.750, 0.125, 0.125, 0.125}); + build_tesseract(&cell_elems, &cell_verts, {+0.00, -0.875, -0.875, +0.875}, {0.750, 0.125, 0.125, 0.125}); + build_tesseract(&cell_elems, &cell_verts, {+0.00, -0.875, +0.875, -0.875}, {0.750, 0.125, 0.125, 0.125}); + build_tesseract(&cell_elems, &cell_verts, {+0.00, -0.875, +0.875, +0.875}, {0.750, 0.125, 0.125, 0.125}); + build_tesseract(&cell_elems, &cell_verts, {+0.00, +0.875, -0.875, -0.875}, {0.750, 0.125, 0.125, 0.125}); + build_tesseract(&cell_elems, &cell_verts, {+0.00, +0.875, -0.875, +0.875}, {0.750, 0.125, 0.125, 0.125}); + build_tesseract(&cell_elems, &cell_verts, {+0.00, +0.875, +0.875, -0.875}, {0.750, 0.125, 0.125, 0.125}); + build_tesseract(&cell_elems, &cell_verts, {+0.00, +0.875, +0.875, +0.875}, {0.750, 0.125, 0.125, 0.125}); + } + //endregion + + //region cube frame + if (CUBE) { + build_tesseract(&cell_elems, &cell_verts, {-0.875, -0.875, +0.00, +0.00}, {0.125, 0.125, 1.000, 0.125}); + build_tesseract(&cell_elems, &cell_verts, {-0.875, +0.875, +0.00, +0.00}, {0.125, 0.125, 1.000, 0.125}); + build_tesseract(&cell_elems, &cell_verts, {+0.875, -0.875, +0.00, +0.00}, {0.125, 0.125, 1.000, 0.125}); + build_tesseract(&cell_elems, &cell_verts, {+0.875, +0.875, +0.00, +0.00}, {0.125, 0.125, 1.000, 0.125}); + + build_tesseract(&cell_elems, &cell_verts, {-0.875, +0.00, -0.875, +0.00}, {0.125, 0.750, 0.125, 0.125}); + build_tesseract(&cell_elems, &cell_verts, {-0.875, +0.00, +0.875, +0.00}, {0.125, 0.750, 0.125, 0.125}); + build_tesseract(&cell_elems, &cell_verts, {+0.875, +0.00, -0.875, +0.00}, {0.125, 0.750, 0.125, 0.125}); + build_tesseract(&cell_elems, &cell_verts, {+0.875, +0.00, +0.875, +0.00}, {0.125, 0.750, 0.125, 0.125}); + + build_tesseract(&cell_elems, &cell_verts, {+0.00, -0.875, -0.875, +0.00}, {0.750, 0.125, 0.125, 0.125}); + build_tesseract(&cell_elems, &cell_verts, {+0.00, -0.875, +0.875, +0.00}, {0.750, 0.125, 0.125, 0.125}); + build_tesseract(&cell_elems, &cell_verts, {+0.00, +0.875, -0.875, +0.00}, {0.750, 0.125, 0.125, 0.125}); + build_tesseract(&cell_elems, &cell_verts, {+0.00, +0.875, +0.875, +0.00}, {0.750, 0.125, 0.125, 0.125}); + } + //endregion matrices = { glm::identity(), + glm::vec4(0), + glm::identity(), glm::identity(), }; @@ -191,9 +225,17 @@ class GLApp : public App { glfwGetFramebufferSize(getWindow(), &width, &height); float ratio = (float) width / height; - matrices.model = - rotor(glm::vec4(0, 1, 0, 0), glm::vec4(0, 0, 1, 0), getTime() / 4) * - rotor(glm::vec4(1, 1, 1, 0), glm::vec4(0, 0, 0, 1), getTime() / 5); + matrices.model = glm::identity() * +// rotor(glm::vec4(1, 0, 0, 0), glm::vec4(0, 1, 0, 0), getTime() / 5) * + +// rotor(glm::vec4(1, 1, 1, 0), glm::vec4(0, 0, 0, 1), 1) * +// rotor(glm::vec4(1, 0, 0, 0), glm::vec4(0, 0, 0, 1), 1) * + + rotor(glm::vec4(1, 1, 1, 0), glm::vec4(0, 0, 0, 1), getTime() / 4) * + rotor(glm::vec4(1, 0, 0, 0), glm::vec4(0, 0, 0, 1), getTime() / 5) * + 1.f; + +// matrices.offset.w = sin(getTime() / 3) * 1.8f; matrices.view = glm::lookAt(glm::vec3(0, 0, -4), glm::vec3(0, 0, 0), glm::vec3(0, 1, 0)); matrices.proj = glm::perspective(1.f, ratio, 0.1f, 20.0f);