summaryrefslogtreecommitdiff
path: root/gfx/gl
diff options
context:
space:
mode:
authorDan Goodliffe <dan@randomdan.homeip.net>2022-12-11 14:22:57 +0000
committerDan Goodliffe <dan.goodliffe@octal.co.uk>2022-12-12 09:17:38 +0000
commit379b07fa1fb953cc175028fcb95dfbb64c392451 (patch)
treea299bb5118612a308f2404638e24d3b4184a78d7 /gfx/gl
parentFix case of GetViewProjection (diff)
downloadilt-379b07fa1fb953cc175028fcb95dfbb64c392451.tar.bz2
ilt-379b07fa1fb953cc175028fcb95dfbb64c392451.tar.xz
ilt-379b07fa1fb953cc175028fcb95dfbb64c392451.zip
Make Camera members private with accessors and helpful setters
Diffstat (limited to 'gfx/gl')
-rw-r--r--gfx/gl/camera.cpp7
-rw-r--r--gfx/gl/camera.h38
2 files changed, 40 insertions, 5 deletions
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 <ray.hpp>
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 <glm/glm.hpp>
+#include <maths.h>
#include <ray.hpp>
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;
};