diff options
author | Dan Goodliffe <dan@randomdan.homeip.net> | 2021-01-17 18:54:26 +0000 |
---|---|---|
committer | Dan Goodliffe <dan@randomdan.homeip.net> | 2021-01-17 18:54:26 +0000 |
commit | 43a87590f45aa6e55724d30d0c2d0d34b407a57e (patch) | |
tree | 21ce8e8886f8aa58b159419b7d885f57d9a37580 /camera.cpp | |
parent | Initial commit (diff) | |
download | ilt-43a87590f45aa6e55724d30d0c2d0d34b407a57e.tar.bz2 ilt-43a87590f45aa6e55724d30d0c2d0d34b407a57e.tar.xz ilt-43a87590f45aa6e55724d30d0c2d0d34b407a57e.zip |
First cut modernizing and sanitizing
Diffstat (limited to 'camera.cpp')
-rw-r--r-- | camera.cpp | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/camera.cpp b/camera.cpp new file mode 100644 index 0000000..b4a76d0 --- /dev/null +++ b/camera.cpp @@ -0,0 +1,46 @@ +#include "camera.h" +#include <glm/gtx/transform.hpp> + +Camera::Camera(glm::vec3 pos, float fov, float aspect, float zNear, float zFar) : + projection {glm::perspective(fov, aspect, zNear, zFar)}, pos {pos}, forward {0.0F, 0.0F, 1.0F}, up {0.0F, 1.0F, + 0.0F} +{ +} + +glm::mat4 +Camera::GetViewProjection() const +{ + return projection * glm::lookAt(pos, pos + forward, up); +} + +void +Camera::MoveForward(float amt) +{ + pos += forward * amt; +} + +void +Camera::MoveRight(float amt) +{ + pos += glm::cross(up, forward) * amt; +} + +void +Camera::Pitch(float angle) +{ + const auto right = glm::normalize(glm::cross(up, forward)); + + forward = glm::vec3(glm::normalize(glm::rotate(angle, right) * glm::vec4(forward, 0.0))); + up = glm::normalize(glm::cross(forward, right)); +} + +void +Camera::RotateY(float angle) +{ + static constexpr glm::vec3 UP {0.0F, 1.0F, 0.0F}; + + const auto rotation = glm::rotate(angle, UP); + + forward = glm::vec3(glm::normalize(rotation * glm::vec4(forward, 0.0))); + up = glm::vec3(glm::normalize(rotation * glm::vec4(up, 0.0))); +} |