From f65732c79bdc7a3188f3d9a2173e2e721a52512c Mon Sep 17 00:00:00 2001 From: cinnaboot Date: Tue, 11 Dec 2018 06:46:58 -0500 Subject: [PATCH] move scene_matrices into camera struct --- src/renderer.cpp | 91 +++++++++++------------------------------------- 1 file changed, 20 insertions(+), 71 deletions(-) diff --git a/src/renderer.cpp b/src/renderer.cpp index 96f1cea..1be80d4 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp @@ -38,14 +38,6 @@ typedef struct clear_col } clear_col; clear_col g_clear_col { 75.f / 255.f, 135.f / 255.f, 135.f / 255.f, 1.f }; -typedef struct gl_matrix_info -{ - glm::mat4 projection; - glm::mat4 view; - glm::mat4 model; - glm::mat4 MVP; -} gl_matrix_info; - // forward declarations void initMatrices(projection_type p); @@ -59,8 +51,6 @@ void fillHexLineBuffer(GLfloat buf[], int len, std::vector* hexes); // globals -// TODO: store scene_matrices on camera object -static gl_matrix_info g_scene_matrices; static render_group* g_filled_hex_render_group; static render_group* g_hex_line_render_group; static render_group* g_debug_render_group; @@ -209,7 +199,7 @@ getUnprojectedCoords(int32 x, int32 y, int32 vp_width, int32 vp_height) glReadPixels(x, y, 1, 1, GL_DEPTH_COMPONENT, GL_FLOAT, &depth); glm::vec4 viewport = glm::vec4(0, 0, vp_width, vp_height); glm::vec3 wincoord = glm::vec3(x, y, depth); - glm::vec3 vU = glm::unProject(wincoord, g_scene_matrices.view, g_scene_matrices.projection, viewport); + glm::vec3 vU = glm::unProject(wincoord, g_render_state->cam.view, g_render_state->cam.projection, viewport); v2f v(vU.x, vU.y); return v; @@ -291,8 +281,8 @@ moveCamera(bool up, bool left, bool down, bool right, bool forward, bool backwar p += (v * MOVE_SPEED); glm::vec3 diff = old - p; - g_scene_matrices.view = glm::translate(g_scene_matrices.view, diff); - g_scene_matrices.MVP = g_scene_matrices.projection * g_scene_matrices.view * g_scene_matrices.model; + g_render_state->cam.view = glm::translate(g_render_state->cam.view, diff); + g_render_state->cam.MVP = g_render_state->cam.projection * g_render_state->cam.view * g_render_state->cam.model; } void @@ -320,8 +310,8 @@ rotateCamera(int32 xrel, int32 yrel) c.left = glm::normalize(glm::cross(c.forward, c.up)); c.up = glm::normalize(glm::cross(c.left, c.forward)); - g_scene_matrices.view = glm::lookAt(c.position, c.position + c.forward, c.up); - g_scene_matrices.MVP = g_scene_matrices.projection * g_scene_matrices.view * g_scene_matrices.model; + g_render_state->cam.view = glm::lookAt(c.position, c.position + c.forward, c.up); + g_render_state->cam.MVP = g_render_state->cam.projection * g_render_state->cam.view * g_render_state->cam.model; } // NOTE: don't need this yet @@ -340,8 +330,8 @@ rollCamera(bool CW, bool CCW) glm::vec4 v(c.up.x, c.up.y, c.up.z, 0); v = v * m; g_render_state->cam.up = glm::vec3(v.x, v.y, v.z); - g_scene_matrices.view *= m; - g_scene_matrices.MVP = g_scene_matrices.projection * g_scene_matrices.view * g_scene_matrices.model; + g_render_state->cam.view *= m; + g_render_state->cam.MVP = g_render_state->cam.projection * g_render_state->cam.view * g_render_state->cam.model; #endif } @@ -351,9 +341,9 @@ renderFrame(render_state* rs, std::vector *hexes, Entity* entities, ui glClearColor(g_clear_col.R, g_clear_col.G, g_clear_col.B, g_clear_col.A); glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); - glm::mat4 m_model = g_scene_matrices.model; - glm::mat4 m_view = g_scene_matrices.view; - glm::mat4 m_projection = g_scene_matrices.projection; + glm::mat4 m_model = g_render_state->cam.model; + glm::mat4 m_view = g_render_state->cam.view; + glm::mat4 m_projection = g_render_state->cam.projection; // filled hexes @@ -385,8 +375,8 @@ renderDebug(render_state* rs, std::vector &vertices) buf[6] = vertices[2].x; buf[7] = vertices[2].y; buf[8] = 0; buf[9] = vertices[3].x; buf[10] = vertices[3].y; buf[11] = 0; - rgDraw(g_debug_render_group, g_scene_matrices.model, g_scene_matrices.view, - g_scene_matrices.projection, rs->lights, rs->num_lights, true); + rgDraw(g_debug_render_group, g_render_state->cam.model, g_render_state->cam.view, + g_render_state->cam.projection, rs->lights, rs->num_lights, true); } @@ -399,65 +389,24 @@ initMatrices(projection_type p) if (p == PERSPECTIVE) { - // TODO: replace referernces to g_scene_matrices with camera.matrix_name - g_scene_matrices.projection = g_render_state->cam.projection; - g_scene_matrices.view = g_render_state->cam.view; - //g_scene_matrices.model = g_render_state->cam.model; - //g_scene_matrices.MVP = g_render_state->cam.MVP; -#if 0 - g_scene_matrices.projection = glm::infinitePerspective( - glm::radians(60.f), // FoV - 16.f / 9.f, // ascpect ratio - 0.1f // near clip plane - ); - - g_render_state->cam.position = glm::vec3(640,0,100); - g_render_state->cam.target = glm::vec3(640,500,0); - //g_render_state->cam.target = glm::vec3(0,0,0); - // inital rotation should match target direction - glm::vec3 &p = g_render_state->cam.position; - glm::vec3 &t = g_render_state->cam.target; - g_render_state->cam.hAngle = 0; - g_render_state->cam.vAngle = glm::atan((t.z - p.z) / (t.y - p.y)); - - ////// - // TODO: add call to rotate camera here to remove duplicate code - camera &c = g_render_state->cam; - float &h = c.hAngle; - float &v = c.vAngle; - c.forward = glm::vec3( - glm::cos(v) * glm::sin(h), - glm::cos(v) * glm::cos(h), - glm::sin(v) - ); - - glm::normalize(c.forward); - ////// - - g_render_state->cam.up = glm::vec3(0,1,0); - g_render_state->cam.left = glm::normalize(glm::cross(g_render_state->cam.up, g_render_state->cam.forward)); - g_render_state->cam.up = glm::normalize(glm::cross(g_render_state->cam.forward, g_render_state->cam.left)); - - g_scene_matrices.view = glm::lookAt( - g_render_state->cam.position, // camera position - g_render_state->cam.position + g_render_state->cam.forward, - g_render_state->cam.up // "up" vector - ); -#endif + g_render_state->cam.projection = g_render_state->cam.projection; + g_render_state->cam.view = g_render_state->cam.view; + //g_render_state->cam.model = g_render_state->cam.model; + //g_render_state->cam.MVP = g_render_state->cam.MVP; } else // ORTHO { // left, right, bottom, top, zNear, zFar - g_scene_matrices.projection = glm::ortho(0.f, 1280.0f, 0.f, 720.0f, 0.1f, 100.0f); - g_scene_matrices.view = glm::lookAt( + g_render_state->cam.projection = glm::ortho(0.f, 1280.0f, 0.f, 720.0f, 0.1f, 100.0f); + g_render_state->cam.view = glm::lookAt( glm::vec3(0.0f, 0.0f, 1.0f), // camera position glm::vec3(0.0f, 0.0f, 0.0f), // look at position glm::vec3(0,1,0) // "up" vector ); } - g_scene_matrices.model = glm::mat4(1.0f); - g_scene_matrices.MVP = g_scene_matrices.projection * g_scene_matrices.view * g_scene_matrices.model; + g_render_state->cam.model = glm::mat4(1.0f); + g_render_state->cam.MVP = g_render_state->cam.projection * g_render_state->cam.view * g_render_state->cam.model; } void