|
|
|
@ -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; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|