X-Git-Url: http://git.mutantstargoat.com?a=blobdiff_plain;f=src%2Fcamera.cc;h=0f7773e75be449e2b73226b1306a2034a507176c;hb=63d7f3b0e70ab5e3d530c579b1881967c96b0b92;hp=4db7286f24573fb8e9ee1518dba2b8362f6cf7e4;hpb=369d75c73bf926a6dbcf4d740c8664bbb401602a;p=demo diff --git a/src/camera.cc b/src/camera.cc index 4db7286..0f7773e 100644 --- a/src/camera.cc +++ b/src/camera.cc @@ -30,23 +30,28 @@ void OrbitCamera::set_orbit_params(float phi, float theta, float distance) Mat4 OrbitCamera::get_view_matrix() const { Mat4 view_matrix; - view_matrix.translate(Vec3(0, 0, -distance)); - view_matrix.rotate_x(phi * (float)M_PI / 180); view_matrix.rotate_y(theta * (float)M_PI / 180); + view_matrix.rotate_x(phi * (float)M_PI / 180); + view_matrix.translate(Vec3(0, 0, -distance)); return view_matrix; } -Mat4 calc_projection_matrix(float f, float n, float aspect, float fov) +Mat4 calc_projection_matrix(float fov_deg, float aspect, float n, float f) { + float fov = fov_deg / 180 * M_PI; + float tmp; tmp = 1 / tan(fov / 2.0); + /* near - far clipping planes */ + float range = n - f; + Mat4 pmat = Mat4( - -tmp/aspect, 0, 0, 0, + tmp/aspect, 0, 0, 0, 0, tmp, 0, 0, - 0, 0, (f + n) / (n - f), (2 * f * n) / (n - f), - 0, 0, -1, 0 + 0, 0, (f + n) / range, -1, + 0, 0, 2 * n * f / range, 0 ); return pmat;