--- /dev/null
+#ifndef CAMERA_H_
+#define CAMERA_H_
+
+#include <gmath/gmath.h>
+
+class Camera {
+public:
+ Camera();
+ virtual ~Camera();
+
+ virtual Mat4 get_view_matrix() const = 0;
+};
+
+class OrbitCamera : public Camera {
+protected:
+ float theta;
+ float phi;
+ float distance;
+
+ Vec3 position;
+
+public:
+ OrbitCamera();
+ virtual ~OrbitCamera();
+
+ virtual Mat4 get_view_matrix() const override;
+
+ void set_orbit_params(float theta, float phi, float distance);
+ void set_position(float x, float y, float z);
+};
+
+Mat4 calc_projection_matrix(float fov_deg, float aspect, float n, float f);
+
+#endif // CAMERA_H_