From 43a87590f45aa6e55724d30d0c2d0d34b407a57e Mon Sep 17 00:00:00 2001 From: Dan Goodliffe Date: Sun, 17 Jan 2021 18:54:26 +0000 Subject: First cut modernizing and sanitizing --- camera.cpp | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 camera.cpp (limited to 'camera.cpp') 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 + +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))); +} -- cgit v1.2.3