Browse Source

fix camera translation

master
cinnaboot 8 years ago
parent
commit
f05782f069
  1. 21
      src/renderer.h

21
src/renderer.h

@ -82,9 +82,10 @@ enum projection_type
struct camera struct camera
{ {
glm::vec3 position; glm::vec3 position;
glm::vec3 forward;
glm::vec3 target; glm::vec3 target;
glm::vec3 forward;
glm::vec3 up; glm::vec3 up;
glm::vec3 left;
}; };
typedef struct gl_buffer typedef struct gl_buffer
@ -275,7 +276,9 @@ initMatrices(projection_type p)
g_camera.position = glm::vec3(640,0,100); g_camera.position = glm::vec3(640,0,100);
g_camera.target = glm::vec3(640,500,0); g_camera.target = glm::vec3(640,500,0);
g_camera.up = glm::vec3(0,1,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; glm::vec3 P, T, U;
P = normalize(g_camera.position); 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; glm::mat4 &m = g_scene_matrices.view;
float d = 5.f; // units per frame 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 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;
if (up) p += (f * d); if (up) p -= (f * d);
if (down) p -= (f * d); if (down) p += (f * d);
if (left) if (left)
{ {
glm::vec3 l = glm::cross(u, f); glm::vec3 l = glm::cross(f, u);
p += l * d; p += l * d;
} }
if (right) if (right)
{ {
glm::vec3 r = glm::cross(f, u); glm::vec3 r = glm::cross(u, f);
p += r * d; p += r * d;
} }

Loading…
Cancel
Save