Browse Source

fix movement vector magnitude

master
cinnaboot 8 years ago
parent
commit
8a7c782cc4
  1. 22
      src/renderer.h

22
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) if (!up && !left && !down && !right && !forward && !backward)
return; return;
// TODO: fix vector addition bug doubling move speed vector magnitude when
// moving in 2 directions
float d = 5.f; // units per frame float d = 5.f; // units per frame
glm::vec3 f = g_camera.forward; glm::vec3 f = g_camera.forward;
glm::vec3 u = g_camera.up; glm::vec3 u = g_camera.up;
glm::vec3 old = g_camera.position; glm::vec3 old = g_camera.position;
glm::vec3 &p = g_camera.position; glm::vec3 &p = g_camera.position;
glm::vec3 v(0.f); // normalized direction
if (forward) p += f * d;
if (backward) p -= f * d; if (forward) v += f;
if (up) p += u * d; if (backward) v -= f;
if (down) p -= u * d; if (up) v += u;
if (down) v -= u;
if (left) if (left)
{ {
glm::vec3 l = glm::cross(f, u); glm::vec3 l = glm::cross(f, u);
p -= l * d; v -= l;
} }
if (right) if (right)
{ {
glm::vec3 r = glm::cross(u, f); glm::vec3 r = glm::cross(u, f);
p -= r * d; v -= r;
} }
glm::normalize(v);
p += (v * d);
glm::vec3 diff = old - p; glm::vec3 diff = old - p;
g_scene_matrices.view = glm::translate(g_scene_matrices.view, diff); 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_scene_matrices.MVP = g_scene_matrices.projection * g_scene_matrices.view * g_scene_matrices.model;

Loading…
Cancel
Save