]> git.tdb.fi Git - libs/gl.git/blobdiff - source/camera.cpp
Support loading uniform arrays from data files
[libs/gl.git] / source / camera.cpp
index 6cbcf6f492680f537559206d311049f26af5f1db..ba8ff718d136744dbff8261d73b887a21258ef76 100644 (file)
@@ -56,6 +56,12 @@ void Camera::set_frustum_axis(float x, float y)
        update_projection_matrix();
 }
 
+void Camera::set_frustum_rotation(const Geometry::Angle<float> &r)
+{
+       rotate = r;
+       update_projection_matrix();
+}
+
 void Camera::set_position(const Vector3 &p)
 {
        position = p;
@@ -105,7 +111,7 @@ void Camera::apply() const
 
 void Camera::update_projection_matrix()
 {
-       float frustum_h = tan(fov/2.0f)*clip_near;
+       float frustum_h = (fov!=Geometry::Angle<float>::zero() ? tan(fov/2.0f)*clip_near : height/2);
        float frustum_w = frustum_h*aspect;
        float left = frustum_w*(frustum_x-1.0f);
        float right = frustum_w*(frustum_x+1.0f);
@@ -115,6 +121,7 @@ void Camera::update_projection_matrix()
                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);
+       proj_matrix = Matrix::rotation(rotate, Vector3(0, 0, 1))*proj_matrix;
 }
 
 void Camera::update_object_matrix()