From f05782f0691f0ec9b194777f25c9ef077d1eeff8 Mon Sep 17 00:00:00 2001 From: cinnaboot Date: Wed, 27 Jun 2018 16:01:58 -0400 Subject: [PATCH] fix camera translation --- src/renderer.h | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/src/renderer.h b/src/renderer.h index ec9e64b..eeed4a7 100644 --- a/src/renderer.h +++ b/src/renderer.h @@ -82,9 +82,10 @@ enum projection_type struct camera { glm::vec3 position; - glm::vec3 forward; glm::vec3 target; + glm::vec3 forward; glm::vec3 up; + glm::vec3 left; }; typedef struct gl_buffer @@ -275,7 +276,9 @@ initMatrices(projection_type p) g_camera.position = glm::vec3(640,0,100); g_camera.target = glm::vec3(640,500,0); g_camera.up = glm::vec3(0,1,0); - g_camera.forward = glm::normalize(g_camera.target - g_camera.position); + g_camera.forward = glm::normalize(g_camera.position - g_camera.target); + g_camera.left = glm::normalize(glm::cross(g_camera.up, g_camera.forward)); + g_camera.up = glm::cross(g_camera.forward, g_camera.left); glm::vec3 P, T, U; P = normalize(g_camera.position); @@ -401,26 +404,20 @@ moveCamera(bool up, bool left, bool down, bool right) glm::mat4 &m = g_scene_matrices.view; float d = 5.f; // units per frame -#if 0 - if (up) m = glm::translate(m, glm::vec3(0, -1 * d, 0)); - if (left) m = glm::translate(m, glm::vec3(d, 0, 0)); - if (down) m = glm::translate(m, glm::vec3(0, d, 0)); - if (right) m = glm::translate(m, glm::vec3(-1 * d, 0, 0)); -#endif glm::vec3 f = g_camera.forward; glm::vec3 u = g_camera.up; glm::vec3 old = g_camera.position; glm::vec3 &p = g_camera.position; - if (up) p += (f * d); - if (down) p -= (f * d); + if (up) p -= (f * d); + if (down) p += (f * d); if (left) { - glm::vec3 l = glm::cross(u, f); + glm::vec3 l = glm::cross(f, u); p += l * d; } if (right) { - glm::vec3 r = glm::cross(f, u); + glm::vec3 r = glm::cross(u, f); p += r * d; }