From 379b07fa1fb953cc175028fcb95dfbb64c392451 Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Sun, 11 Dec 2022 14:22:57 +0000 Subject: Make Camera members private with accessors and helpful setters --- gfx/gl/camera.cpp | 7 ++++--- gfx/gl/camera.h | 38 ++++++++++++++++++++++++++++++++++++-- 2 files changed, 40 insertions(+), 5 deletions(-) (limited to 'gfx/gl') diff --git a/gfx/gl/camera.cpp b/gfx/gl/camera.cpp index 7438739..0e81282 100644 --- a/gfx/gl/camera.cpp +++ b/gfx/gl/camera.cpp @@ -4,19 +4,20 @@ #include Camera::Camera(glm::vec3 pos, float fov, float aspect, float zNear, float zFar) : - pos {pos}, forward {::north}, up {::up}, projection {glm::perspective(fov, aspect, zNear, zFar)} + position {pos}, forward {::north}, up {::up}, projection {glm::perspective(fov, aspect, zNear, zFar)} { } glm::mat4 Camera::getViewProjection() const { - return projection * glm::lookAt(pos, pos + forward, up); + return projection * glm::lookAt(position, position + forward, up); } Ray Camera::unProject(const glm::vec2 & mouse) const { static constexpr const glm::vec4 screen {0, 0, 1, 1}; - return {pos, glm::normalize(glm::unProject(mouse ^ 1, glm::lookAt(::origin, forward, up), projection, screen))}; + return {position, + glm::normalize(glm::unProject(mouse ^ 1, glm::lookAt(::origin, forward, up), projection, screen))}; } diff --git a/gfx/gl/camera.h b/gfx/gl/camera.h index e22d23f..d82802f 100644 --- a/gfx/gl/camera.h +++ b/gfx/gl/camera.h @@ -1,6 +1,7 @@ #pragma once #include +#include #include class Camera { @@ -10,10 +11,43 @@ public: [[nodiscard]] glm::mat4 getViewProjection() const; [[nodiscard]] Ray unProject(const glm::vec2 &) const; - glm::vec3 pos; + void + setPosition(const glm::vec3 & p) + { + position = p; + } + void + setForward(const glm::vec3 & f) + { + forward = f; + } + void + setView(const glm::vec3 & p, const glm::vec3 & f, const glm::vec3 & u = ::up) + { + position = p; + forward = f; + up = u; + } + void + lookAt(const glm::vec3 & target) + { + setForward(glm::normalize(target - position)); + } + [[nodiscard]] auto + getForward() const + { + return forward; + } + [[nodiscard]] auto + getPosition() const + { + return position; + } + +private: + glm::vec3 position; glm::vec3 forward; glm::vec3 up; -private: glm::mat4 projection; }; -- cgit v1.2.3