X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fcamera.cpp;fp=source%2Fcamera.cpp;h=a0c89e0efb6c2129354efa273545bb20605008b6;hb=c90cc1f31a285ed2ef21a21b5610837425d1ef51;hp=fca3ea33d504773d90e073c598175a33d9be2f46;hpb=bdced13c0814d1a860573a0ac19964da2ac4d5e1;p=libs%2Fgl.git diff --git a/source/camera.cpp b/source/camera.cpp index fca3ea33..a0c89e0e 100644 --- a/source/camera.cpp +++ b/source/camera.cpp @@ -7,6 +7,7 @@ namespace GL { Camera::Camera(): fov(Geometry::Angle::from_turns(0.125)), + height(0), aspect(4.0/3.0), clip_near(0.1), clip_far(10), @@ -26,6 +27,15 @@ void Camera::set_field_of_view(const Geometry::Angle &f) update_projection_matrix(); } +void Camera::set_orthographic(float w, float h) +{ + fov = Geometry::Angle::zero(); + height = h; + if(w) + aspect = w/h; + update_projection_matrix(); +} + void Camera::set_aspect(float a) { aspect = a; @@ -101,7 +111,10 @@ void Camera::update_projection_matrix() float right = frustum_w*(frustum_x+1.0f); float bottom = frustum_h*(frustum_y-1.0f); float top = frustum_h*(frustum_y+1.0f); - proj_matrix = Matrix::frustum(left, right, bottom, top, clip_near, clip_far); + if(fov>Geometry::Angle::zero()) + proj_matrix = Matrix::frustum(left, right, bottom, top, clip_near, clip_far); + else + proj_matrix = Matrix::ortho(left, right, bottom, top, clip_near, clip_far); } void Camera::update_object_matrix()