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