]> git.localhorst.tv Git - blank.git/blobdiff - src/camera.cpp
remove unused (explicit) destructors
[blank.git] / src / camera.cpp
index 8309fe6414965b2a67d7c560f7c30e3d34227db6..c5283bd7f77bf86729b688342265dc4919bab47f 100644 (file)
@@ -7,20 +7,14 @@
 namespace blank {
 
 Camera::Camera()
-: fov(45.0f)
+: FPSController()
+, fov(45.0f)
 , aspect(1.0f)
 , near_clip(0.1f)
 , far_clip(100.0f)
-, position(0, 0, 0)
-, target(0, 0, -1)
-, up(0, 1, 0)
 , projection(glm::perspective(fov, aspect, near_clip, far_clip))
-, view(glm::lookAt(position, target, up))
-, vp(projection * view) {
-
-}
-
-Camera::~Camera() {
+, view(glm::inverse(Transform()))
+, vp(projection) {
 
 }
 
@@ -54,15 +48,24 @@ void Camera::Clip(float near, float far) {
        UpdateProjection();
 }
 
+Ray Camera::Aim() const {
+       const glm::mat4 inv_vp(glm::inverse(vp));
+       glm::vec4 from = inv_vp * glm::vec4(0.0f, 0.0f, -1.0f, 1.0f);
+       from /= from.w;
+       glm::vec4 to = inv_vp * glm::vec4(0.0f, 0.0f, 1.0f, 1.0f);
+       to /= to.w;
+       return Ray{ glm::vec3(from), glm::normalize(glm::vec3(to - from)) };
+}
 
-void Camera::UpdateProjection() {
-       projection = glm::perspective(fov, aspect, near_clip, far_clip);
+
+void Camera::Update(int dt) {
+       FPSController::Update(dt);
+       view = glm::inverse(Transform());
        vp = projection * view;
 }
 
-void Camera::UpdateView() {
-       view = glm::lookAt(position, target, up);
-       vp = projection * view;
+void Camera::UpdateProjection() {
+       projection = glm::perspective(fov, aspect, near_clip, far_clip);
 }
 
 }