Browse Source

fix movement vector magnitude

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

18
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;
glm::vec3 v(0.f); // normalized direction
if (forward) p += f * d;
if (backward) p -= f * d;
if (up) p += u * d;
if (down) p -= u * d;
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;

Loading…
Cancel
Save