Browse Source

"working" free camera for perspective view

master
cinnaboot 8 years ago
parent
commit
ce9466c9ae
  1. 36
      src/renderer.h

36
src/renderer.h

@ -286,19 +286,28 @@ initMatrices(projection_type p)
glm::vec3 &p = g_camera.position; glm::vec3 &p = g_camera.position;
glm::vec3 &t = g_camera.target; glm::vec3 &t = g_camera.target;
g_camera.hAngle = 0; g_camera.hAngle = 0;
g_camera.vAngle = glm::atan((p.z - t.z) / (p.y - t.y)); g_camera.vAngle = glm::atan((t.z - p.z) / (t.y - p.y));
//////
camera &c = g_camera;
float &h = c.hAngle;
float &v = c.vAngle;
c.forward = glm::vec3(
glm::cos(v) * glm::sin(h),
glm::cos(v) * glm::cos(h),
glm::sin(v)
);
//////
g_camera.up = glm::vec3(0,1,0); g_camera.up = glm::vec3(0,1,0);
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.left = glm::normalize(glm::cross(g_camera.up, g_camera.forward));
g_camera.up = glm::cross(g_camera.forward, g_camera.left); g_camera.up = glm::cross(g_camera.forward, g_camera.left);
glm::mat4 mV = glm::lookAt( g_scene_matrices.view = glm::lookAt(
g_camera.position, // camera position g_camera.position, // camera position
g_camera.target, // look at position g_camera.position + g_camera.forward,
g_camera.up // "up" vector g_camera.up // "up" vector
); );
g_scene_matrices.view = mV;
} }
else // ORTHO else // ORTHO
{ {
@ -388,17 +397,17 @@ moveCamera(bool up, bool left, bool down, bool right)
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(f, u); glm::vec3 l = glm::cross(f, u);
p += l * d; p -= l * d;
} }
if (right) if (right)
{ {
glm::vec3 r = glm::cross(u, f); glm::vec3 r = glm::cross(u, f);
p += r * d; p -= r * d;
} }
glm::vec3 diff = old - p; glm::vec3 diff = old - p;
@ -413,11 +422,12 @@ rotateCamera(int32 xrel, int32 yrel)
float &h = c.hAngle; float &h = c.hAngle;
float &v = c.vAngle; float &v = c.vAngle;
h += 0.005f * xrel; h += 0.005f * xrel;
v -= 0.005f * yrel;
c.forward = glm::vec3( c.forward = glm::vec3(
glm::cos(v) * glm::sin(h), glm::cos(v) * glm::sin(h),
glm::cos(v) * glm::cos(h), glm::cos(v) * glm::cos(h),
glm::sin(v) glm::sin(v)
); );
glm::mat4 &m = g_scene_matrices.view; glm::mat4 &m = g_scene_matrices.view;
m = glm::lookAt(c.position, c.position + c.forward, c.up); m = glm::lookAt(c.position, c.position + c.forward, c.up);

Loading…
Cancel
Save