diff --git a/main/src/main.cpp b/main/src/main.cpp index 786e56d..13ef8ef 100644 --- a/main/src/main.cpp +++ b/main/src/main.cpp @@ -66,39 +66,50 @@ struct State { glm::vec3 stereo(float xi, float nu, float eta) { auto h = hopf(xi, nu, eta); - auto rot1 = glm::mat4( - glm::vec4(-0.161583, 0.474819, 0.036271, 0.864373), - glm::vec4(0.637664, 0.677328, 0.25526, -0.263578), - glm::vec4(0.392037, 0.015514, -0.914032, 0.103119), - glm::vec4(0.643116, -0.561741, 0.313199, 0.415657) + float xw = 0.8; + float yw = 0.0; + float zw = 2.5; + float xy = 0.0; + float yz = 0.5; + float zx = 0.0; + + auto r = glm::mat4( + glm::vec4(cos(xw), 0, 0, sin(xw)), + glm::vec4(0, 1, 0, 0), + glm::vec4(0, 0, 1, 0), + glm::vec4(-sin(xw), 0, 0, cos(xw)) + ) * glm::mat4( + glm::vec4(1, 0, 0, 0), + glm::vec4(0, cos(yw), 0, sin(yw)), + glm::vec4(0, 0, 1, 0), + glm::vec4(0, -sin(yw), 0, cos(yw)) + ) * glm::mat4( + glm::vec4(1, 0, 0, 0), + glm::vec4(0, 1, 0, 0), + glm::vec4(0, 0, cos(zw), sin(zw)), + glm::vec4(0, 0, -sin(zw), cos(zw)) + ) * glm::mat4( + glm::vec4(cos(xy), sin(xy), 0, 0), + glm::vec4(-sin(xy), cos(xy), 0, 0), + glm::vec4(0, 0, 1, 0), + glm::vec4(0, 0, 0, 1) + ) * glm::mat4( + glm::vec4(1, 0, 0, 0), + glm::vec4(0, cos(yz), sin(yz), 0), + glm::vec4(0, -sin(yz), cos(yz), 0), + glm::vec4(0, 0, 0, 1) + ) * glm::mat4( + glm::vec4(cos(zx), 0, -sin(zx), 0), + glm::vec4(0, 1, 0, 0), + glm::vec4(sin(zx), 0, cos(zx), 0), + glm::vec4(0, 0, 0, 1) ); - auto rot2 = glm::mat4( - glm::vec4(+0.656973, +0.386914, +0.646219, +0.032970), - glm::vec4(-0.459722, +0.569877, +0.159946, -0.662054), - glm::vec4(-0.268466, -0.653407, +0.675016, -0.212936), - glm::vec4(-0.533824, +0.314007, +0.318080, +0.717815) - ); - - auto rot3 = glm::mat4( - glm::vec4(0.794847, -0.598309, -0.101081, -0.00544741), - glm::vec4(-0.0472779, 0.0524503, -0.719464, 0.690936), - glm::vec4(0.592606, 0.798574, -0.06232, -0.0849633), - glm::vec4(0.12167, 0.0394918, 0.684308, 0.717888) - ); - - auto rot4 = glm::mat4( - glm::vec4(-0.362372, 0.701484, 0.304057, 0.533071), - glm::vec4(-0.582584, -0.358701, -0.598223, 0.417213), - glm::vec4(-0.579933, -0.419501, 0.662733, -0.220209), - glm::vec4(0.43928, -0.450868, 0.332376, 0.702342) - ); - - auto rot = rot2; + auto rot = r; h = rot * h; - auto s = h.xzy() / (1 - h.w); + auto s = h.xyz() / (1 - h.w); s /= 2; @@ -173,21 +184,27 @@ struct State { inds_wide.clear(); inds_thin.clear(); - const float XI_R = 32; - const float ETA_R = 4; + const float XI_R = 24; + const float ETA_R = 5; const float ETA_BUF = 0; for (int i = 0; i < XI_R; ++i) { float xi = 2 * PI * i / XI_R; - for (int j = 0; j <= ETA_R; ++j) { + for (int j = 1; j <= ETA_R - 1; ++j) { float eta = ETA_BUF + (PI / 2 - 2 * ETA_BUF) * j / ETA_R; - add_ring(verts_wide, inds_wide, xi, eta, .01); - add_ring(verts_thin, inds_thin, xi, eta, .0025); + add_ring(verts_wide, inds_wide, xi, eta, .015); + add_ring(verts_thin, inds_thin, xi, eta, .004); } } + add_ring(verts_wide, inds_wide, .001f, .0f, .015); + add_ring(verts_thin, inds_thin, .001f, .0f, .008); + + add_ring(verts_wide, inds_wide, .001f, PI / 2 - .0f, .015); + add_ring(verts_thin, inds_thin, .001f, PI / 2 - .0f, .008); + glBindBuffer(GL_ARRAY_BUFFER, vbo_thin); util::bufferData(GL_ARRAY_BUFFER, verts_thin, GL_STATIC_DRAW); glBindBuffer(GL_ARRAY_BUFFER, 0); @@ -296,7 +313,7 @@ void run(State *state, const std::string &title) { glfwWindowHint(GLFW_CONTEXT_VERSION_MINOR, 4); glfwWindowHint(GLFW_OPENGL_PROFILE, GLFW_OPENGL_CORE_PROFILE); - auto window = glfwCreateWindow(1280, 720, title.c_str(), nullptr, nullptr); + auto window = glfwCreateWindow(3840, 1249, title.c_str(), nullptr, nullptr); if (!window) { glfwTerminate(); exit(EXIT_FAILURE);