X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Fcamera.hpp;h=3adb800ce344b03da6a2261d5486c2ef4fd58365;hb=6af76d9e1a6499ebdab405c1d679d24b9e19fded;hp=5be71e24295a7142f0bc2db146d1a3f3c2065ea8;hpb=0a13b3fe342db83eef2c0ddc991a44452df77aa3;p=blank.git diff --git a/src/camera.hpp b/src/camera.hpp index 5be71e2..3adb800 100644 --- a/src/camera.hpp +++ b/src/camera.hpp @@ -3,14 +3,17 @@ #include +#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; @@ -25,14 +28,15 @@ public: 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; @@ -40,10 +44,6 @@ private: float near_clip; float far_clip; - glm::vec3 position; - glm::vec3 target; - glm::vec3 up; - glm::mat4 projection; glm::mat4 view; glm::mat4 vp;