aboutsummaryrefslogtreecommitdiff
path: root/src/camera
diff options
context:
space:
mode:
Diffstat (limited to 'src/camera')
-rw-r--r--src/camera/camera.cpp38
-rw-r--r--src/camera/camera.h3
2 files changed, 25 insertions, 16 deletions
diff --git a/src/camera/camera.cpp b/src/camera/camera.cpp
index 704be7e..69f2787 100644
--- a/src/camera/camera.cpp
+++ b/src/camera/camera.cpp
@@ -5,28 +5,34 @@
#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp> // Include this header for glm::rotate
+void Camera::updateViewMatrix(SceneCameraData cameraData) {
+ m_viewMatrix = Vec4Ops::getViewMatrix4(cameraData.look, cameraData.up, cameraData.over);
+ m_viewMatrix = glm::rotate(m_viewMatrix, glm::radians(settings.xy), glm::vec3(0.f, 1.f, 0.f));
+ m_viewMatrix = glm::rotate(m_viewMatrix, glm::radians(settings.yz), glm::vec3(1.f, 0.f, 0.f));
+ m_viewMatrix = glm::rotate(m_viewMatrix, glm::radians(settings.xz), glm::vec3(0.f, 0.f, 1.f));
+
+
+ // TODO: link sliders here. make them smaller changes since our objects are so small
+ glm::vec4 uiTranslation = glm::vec4(settings.xw, settings.yw, 0.f, settings.zw);
+ m_translationVector = -cameraData.pos + uiTranslation;
+
+ m_inverseViewMatrix = glm::inverse(m_viewMatrix);
+ m_inverseTranslationVector = -m_translationVector;
+ m_controlPoints = {
+ {cameraData.pos[0], cameraData.pos[1], cameraData.pos[2]},
+ {cameraData.pos[0], cameraData.pos[1] - 2.f, cameraData.pos[2] - 2.f},
+ {cameraData.pos[0] + 2.f, cameraData.pos[1] + 2.f, cameraData.pos[2] -2.f},
+ {cameraData.pos[0] + 2.f, cameraData.pos[1], cameraData.pos[2]}
+ };
+}
+
Camera::Camera(SceneCameraData cameraData) :
m_pos(cameraData.pos),
m_heightAngle(cameraData.heightAngle),
m_focalLength(cameraData.focalLength),
m_aperture(cameraData.aperture)
{
- m_viewMatrix = Vec4Ops::getViewMatrix4(cameraData.look, cameraData.up, cameraData.over);
- // add settings.xy rotation
- m_viewMatrix = glm::rotate(m_viewMatrix, glm::radians(settings.xy), glm::vec3(0.f, 1.f, 0.f));
- m_viewMatrix = glm::rotate(m_viewMatrix, glm::radians(settings.yz), glm::vec3(1.f, 0.f, 0.f));
- m_viewMatrix = glm::rotate(m_viewMatrix, glm::radians(settings.xz), glm::vec3(0.f, 0.f, 1.f));
-
- m_translationVector = -cameraData.pos;
-
- m_inverseViewMatrix = glm::inverse(m_viewMatrix);
- m_inverseTranslationVector = -m_translationVector;
- m_controlPoints = {
- {cameraData.pos[0], cameraData.pos[1], cameraData.pos[2]},
- {cameraData.pos[0], cameraData.pos[1] - 2.f, cameraData.pos[2] - 2.f},
- {cameraData.pos[0] + 2.f, cameraData.pos[1] + 2.f, cameraData.pos[2] -2.f},
- {cameraData.pos[0] + 2.f, cameraData.pos[1], cameraData.pos[2]}
- };
+ updateViewMatrix(cameraData);
}
glm::mat4 Camera::getViewMatrix() const {
diff --git a/src/camera/camera.h b/src/camera/camera.h
index 08750fb..37314c5 100644
--- a/src/camera/camera.h
+++ b/src/camera/camera.h
@@ -40,6 +40,8 @@ public:
float cameraDepth = -1.f;
std::vector<glm::vec3> m_controlPoints;
+ void updateViewMatrix(SceneCameraData cameraData);
+
private:
glm::mat4 m_viewMatrix{};
glm::mat4 m_inverseViewMatrix{};
@@ -51,5 +53,6 @@ private:
glm::vec4 m_translationVector{};
glm::vec4 m_inverseTranslationVector{};
+
};