]> git.tdb.fi Git - libs/gl.git/blobdiff - source/render/camera.cpp
Initial implementation of Vulkan backend
[libs/gl.git] / source / render / camera.cpp
index 8b966464fd14d2ed42eb478d4b025f95bc1fbcfa..9ecb79cd80643d4ce4e4d77f045d4354aebb37af 100644 (file)
@@ -7,22 +7,29 @@ using namespace std;
 namespace Msp {
 namespace GL {
 
-Camera::Camera():
-       fov(Geometry::Angle<float>::from_turns(0.125)),
-       height(0),
-       aspect(4.0/3.0),
-       clip_near(0.1),
-       clip_far(10),
-       frustum_x(0),
-       frustum_y(0),
-       position(0, 0, 0),
-       look_dir(0, 0, -1),
-       up_dir(0, 1, 0)
+Camera::Camera()
 {
        update_projection_matrix();
        update_object_matrix();
 }
 
+void Camera::copy_parameters(const Camera &source)
+{
+       fov = source.fov;
+       height = source.height;
+       aspect = source.aspect;
+       clip_near = source.clip_near;
+       clip_far = source.clip_far;
+       frustum_x = source.frustum_x;
+       frustum_y = source.frustum_y;
+       rotate = source.rotate;
+       position = source.position;
+       look_dir = source.look_dir;
+       up_dir = source.up_dir;
+       update_projection_matrix();
+       update_object_matrix();
+}
+
 void Camera::set_field_of_view(const Geometry::Angle<float> &f)
 {
        fov = f;
@@ -132,6 +139,8 @@ void Camera::update_projection_matrix()
                proj_matrix = Matrix::ortho(left, right, bottom, top, clip_near, clip_far);
        proj_matrix = Matrix::rotation(rotate, Vector3(0, 0, 1))*proj_matrix;
 
+       adjust_projection_matrix(proj_matrix);
+
        shdata.uniform("clip_eye_matrix", proj_matrix);
        shdata.uniform("eye_clip_matrix", invert(proj_matrix));
 }