From 8a7c782cc46cb0c48f9fb7fc25a931f795569571 Mon Sep 17 00:00:00 2001 From: cinnaboot Date: Tue, 3 Jul 2018 11:28:51 -0400 Subject: [PATCH] fix movement vector magnitude --- src/renderer.h | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/renderer.h b/src/renderer.h index 9866157..0d553fa 100644 --- a/src/renderer.h +++ b/src/renderer.h @@ -391,31 +391,31 @@ moveCamera(bool up, bool left, bool down, bool right, bool forward, bool backwar if (!up && !left && !down && !right && !forward && !backward) return; - // TODO: fix vector addition bug doubling move speed vector magnitude when - // moving in 2 directions - float d = 5.f; // units per frame 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 (forward) p += f * d; - if (backward) p -= f * d; - if (up) p += u * d; - if (down) p -= u * d; + glm::vec3 v(0.f); // normalized direction + + if (forward) v += f; + if (backward) v -= f; + if (up) v += u; + if (down) v -= u; if (left) { glm::vec3 l = glm::cross(f, u); - p -= l * d; + v -= l; } if (right) { glm::vec3 r = glm::cross(u, f); - p -= r * d; + v -= r; } - + + glm::normalize(v); + p += (v * d); 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;