#include <glm/glm.hpp>
+#include "controller.hpp"
+#include "geometry.hpp"
+
namespace blank {
-class Camera {
+class Camera
+: public FPSController {
public:
Camera();
- ~Camera();
Camera(const Camera &) = delete;
Camera &operator =(const Camera &) = delete;
void Aspect(float w, float h);
void Clip(float near, float far);
- void Position(glm::vec3 pos) { position = pos; UpdateView(); }
- void Move(glm::vec3 delta) { position += delta; UpdateView(); }
+ Ray Aim() const;
+
+ const glm::mat4 &Projection() { return projection; }
+ const glm::mat4 &View() { return view; }
- void LookAt(glm::vec3 tgt) { target = tgt; UpdateView(); }
+ void Update(int dt);
private:
void UpdateProjection();
- void UpdateView();
private:
float fov;
float near_clip;
float far_clip;
- glm::vec3 position;
- glm::vec3 target;
- glm::vec3 up;
-
glm::mat4 projection;
glm::mat4 view;
glm::mat4 vp;