added a camera class and created a camera that I am not using yet :p
[vkrt] / src / camera.cc
diff --git a/src/camera.cc b/src/camera.cc
new file mode 100644 (file)
index 0000000..620bec4
--- /dev/null
@@ -0,0 +1,60 @@
+#include <math.h>
+
+#include <gmath/gmath.h>
+
+#include "camera.h"
+
+Camera::Camera() {}
+Camera::~Camera() {}
+
+OrbitCamera::OrbitCamera()
+{
+       phi = theta = distance = 0;
+}
+
+OrbitCamera::~OrbitCamera() {}
+
+void OrbitCamera::set_orbit_params(float theta, float phi, float distance)
+{
+       this->phi = phi;
+       this->theta = theta;
+       this->distance = distance;
+}
+
+Mat4 OrbitCamera::get_view_matrix() const
+{
+       Mat4 view_matrix;
+       view_matrix.translation(-position);
+       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 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,
+                       0,                              tmp,    0,                                      0,
+                       0,                              0,          (f + n) / range,    -1,
+                       0,                              0,              2 * n * f / range,  0
+                   );
+
+       return pmat;
+}
+
+void OrbitCamera::set_position(float x, float y, float z)
+{
+       position.x = x;
+       position.y = y;
+       position.z = z;
+}