aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/camera/camera.cpp36
-rw-r--r--src/camera/camera.h3
-rw-r--r--src/raytracer/raytracer.cpp6
-rw-r--r--src/raytracer/raytracescene.cpp2
-rw-r--r--src/raytracer/raytracescene.h4
5 files changed, 30 insertions, 21 deletions
diff --git a/src/camera/camera.cpp b/src/camera/camera.cpp
index 704be7e..fb63d77 100644
--- a/src/camera/camera.cpp
+++ b/src/camera/camera.cpp
@@ -5,28 +5,32 @@
#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);
+ // 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]}
+ };
+}
+
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{};
+
};
diff --git a/src/raytracer/raytracer.cpp b/src/raytracer/raytracer.cpp
index 71a1c7f..b5e8986 100644
--- a/src/raytracer/raytracer.cpp
+++ b/src/raytracer/raytracer.cpp
@@ -54,9 +54,10 @@ void RayTracer::render(RGBA *imageData, const RayTraceScene &scene) {
settings.currentTime++;
// settings.w++;
- // update physics
+ // update physics for moving objects
Physics::updateShapePositions(m_metaData.shapes);
Physics::handleCollisions(m_metaData.shapes);
+
} else { // done rendering
// assemble the video
saveFFMPEGVideo(settings.bulkOutputFolderPath);
@@ -173,7 +174,8 @@ void RayTracer::sceneChanged(QLabel* imageLabel) {
m_imageData = reinterpret_cast<RGBA *>(image.bits());
RayTraceScene rtScene{ m_width, m_height, m_metaData, m_depth };
-
+ // update the camera position
+ rtScene.m_camera.updateViewMatrix(m_metaData.cameraData);
this->render(m_imageData, rtScene);
QImage flippedImage = image.mirrored(false, false);
diff --git a/src/raytracer/raytracescene.cpp b/src/raytracer/raytracescene.cpp
index 77541e3..a81d535 100644
--- a/src/raytracer/raytracescene.cpp
+++ b/src/raytracer/raytracescene.cpp
@@ -57,7 +57,7 @@ const std::vector<SceneLightData> RayTraceScene::getLights() const {
return m_lights;
}
-const Camera& RayTraceScene::getCamera() const {
+const Camera RayTraceScene::getCamera() const {
// Optional TODO: implement the getter or make your own design
return m_camera;
}
diff --git a/src/raytracer/raytracescene.h b/src/raytracer/raytracescene.h
index 35e4fb4..b608918 100644
--- a/src/raytracer/raytracescene.h
+++ b/src/raytracer/raytracescene.h
@@ -28,18 +28,18 @@ public:
const std::vector<SceneLightData> getLights() const;
// The getter of the shared pointer to the camera instance of the scene
- const Camera& getCamera() const;
+ const Camera getCamera() const;
KdTree *m_kdTree;
bvh *m_bvh;
const int &depth() const;
+ Camera& m_camera;
private:
int m_width;
int m_height;
SceneGlobalData m_sceneGlobalData;
- Camera& m_camera;
std::vector<RenderShapeData>m_shapes;
std::vector<SceneLightData>m_lights;
int m_depth;