diff options
author | David Doan <daviddoan@Davids-MacBook-Pro-100.local> | 2023-12-11 17:58:40 -0500 |
---|---|---|
committer | David Doan <daviddoan@Davids-MacBook-Pro-100.local> | 2023-12-11 17:58:40 -0500 |
commit | 5b67f3470236099e6991ed03e6e80fafbfc20284 (patch) | |
tree | d2a26e579159b5d145f87dd5bf40093e63bac228 /src/camera/camera.cpp | |
parent | c47844913a4f15d8e197039ea0365f267a09821c (diff) |
render and rotation
Diffstat (limited to 'src/camera/camera.cpp')
-rw-r--r-- | src/camera/camera.cpp | 33 |
1 files changed, 30 insertions, 3 deletions
diff --git a/src/camera/camera.cpp b/src/camera/camera.cpp index 4c19663..b2d4b12 100644 --- a/src/camera/camera.cpp +++ b/src/camera/camera.cpp @@ -1,6 +1,7 @@ #include <stdexcept> #include "camera.h" #include "vec4ops/vec4ops.h" +#include "settings.h" Camera::Camera(SceneCameraData cameraData) : m_pos(cameraData.pos), @@ -8,11 +9,37 @@ Camera::Camera(SceneCameraData cameraData) : m_focalLength(cameraData.focalLength), m_aperture(cameraData.aperture) { - m_viewMatrix = Vec4Ops::getViewMatrix4(cameraData.pos, glm::vec4(0.f), cameraData.up, cameraData.look); - m_translationVector = glm::vec4{-cameraData.pos.x, -cameraData.pos.y, -cameraData.pos.z, -cameraData.pos.w}; + // m_viewMatrix = Vec4Ops::getViewMatrix4(cameraData.pos, glm::vec4(0.f), cameraData.up, cameraData.look); + // m_translationVector = glm::vec4{-cameraData.pos.x, -cameraData.pos.y, -cameraData.pos.z, -cameraData.pos.w}; + + // m_inverseViewMatrix = glm::inverse(m_viewMatrix); + // m_inverseTranslationVector = -m_translationVector; + glm::vec3 look3{cameraData.look.x, cameraData.look.y, cameraData.look.z}; + glm::vec3 up3{cameraData.up.x, cameraData.up.y, cameraData.up.z}; + + // calculate new basis + glm::vec3 e0 = -glm::normalize(look3); + glm::vec3 e1 = glm::normalize(up3 - glm::dot(up3, e0) * e0); + glm::vec3 e2 = glm::cross(e1, e0); + + glm::mat4 alignment + { + e2.x, e1.x, e0.x, 0.f, + e2.y, e1.y, e0.y, 0.f, + e2.z, e1.z, e0.z, 0.f, + 0.f, 0.f, 0.f, 1.f + }; + glm::mat4 translation + { + 1.f, 0.f, 0.f, 0.f, + 0.f, 1.f, 0.f, 0.f, + 0.f, 0.f, 1.f, 0.f, + -cameraData.pos.x, -cameraData.pos.y, -cameraData.pos.z, 1.f + }; + + m_viewMatrix = alignment * translation; m_inverseViewMatrix = glm::inverse(m_viewMatrix); - m_inverseTranslationVector = -m_translationVector; } |