X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fcamera.hpp;h=419922a39f1c3ee32578b847d5c21c7f31a3a434;hb=4d0ef1687987a0801469c7262f81efd36636605a;hp=88da8caf858aff87a3aacada9bd8cf865d2c300e;hpb=ea1ce7b0fb7709ae56977480821ac96a231a0686;p=blank.git diff --git a/src/camera.hpp b/src/camera.hpp index 88da8ca..419922a 100644 --- a/src/camera.hpp +++ b/src/camera.hpp @@ -3,12 +3,14 @@ #include -#include "model.hpp" +#include "controller.hpp" +#include "geometry.hpp" namespace blank { -class Camera { +class Camera +: public FPSController { public: Camera(); @@ -27,20 +29,15 @@ public: void Aspect(float w, float h); void Clip(float near, float far); - void Position(glm::vec3 pos) { model.Position(pos); UpdateView(); } - void Move(glm::vec3 delta) { model.Move(delta); UpdateView(); } + Ray Aim() const; - // all angles in radians (full circle = 2π) - float Pitch() const { return model.Pitch(); } - void Pitch(float p) { model.Pitch(p); UpdateView(); } - void RotatePitch(float delta) { model.RotatePitch(delta); UpdateView(); } - float Yaw() const { return model.Yaw(); } - void Yaw(float y) { model.Yaw(y); UpdateView(); } - void RotateYaw(float delta) { model.RotateYaw(delta); UpdateView(); } + const glm::mat4 &Projection() { return projection; } + const glm::mat4 &View() { return view; } + + void Update(int dt); private: void UpdateProjection(); - void UpdateView(); private: float fov; @@ -48,8 +45,6 @@ private: float near_clip; float far_clip; - Model model; - glm::mat4 projection; glm::mat4 view; glm::mat4 vp;