aboutsummaryrefslogtreecommitdiff
path: root/src/raytracer/raytracer.cpp
diff options
context:
space:
mode:
authorDavid Doan <daviddoan@Davids-MacBook-Pro-70.local>2023-12-07 21:57:21 -0500
committerDavid Doan <daviddoan@Davids-MacBook-Pro-70.local>2023-12-07 21:57:21 -0500
commit940a2361da8f51ab2547f1b7bfd42dc1c8645642 (patch)
tree5916cfed50ae675ae10275c1134fc522ee59bae3 /src/raytracer/raytracer.cpp
parentcaa765bff49d54217b75aaf0e7acf4e5392a11e4 (diff)
added a GUI
Diffstat (limited to 'src/raytracer/raytracer.cpp')
-rw-r--r--src/raytracer/raytracer.cpp62
1 files changed, 57 insertions, 5 deletions
diff --git a/src/raytracer/raytracer.cpp b/src/raytracer/raytracer.cpp
index c3466cf..93f5225 100644
--- a/src/raytracer/raytracer.cpp
+++ b/src/raytracer/raytracer.cpp
@@ -3,16 +3,19 @@
#include <iostream>
#include "raytracer.h"
#include "raytracescene.h"
+#include "settings.h"
+#include "mainwindow.h"
//struct Ray {
// glm::vec3 p;
// glm::vec3 d;
//};
-RayTracer::RayTracer(const Config &config) : m_config(config) {}
+// RayTracer::RayTracer(const Config &config) : m_config(config) {}
+RayTracer::RayTracer(QWidget *parent) : QWidget(parent) {}
void RayTracer::render(RGBA *imageData, const RayTraceScene &scene) {
- if(m_config.enableParallelism)
+ if(m_enableParallelism)
{
renderParallel(imageData, scene);
return;
@@ -53,7 +56,7 @@ glm::vec4 RayTracer::getPixelFromRay(
const RayTraceScene &scene,
int depth)
{
- if (depth > m_config.maxRecursiveDepth)
+ if (depth > m_maxRecursiveDepth)
{
return glm::vec4(0.f);
}
@@ -63,7 +66,7 @@ glm::vec4 RayTracer::getPixelFromRay(
glm::vec4 closestIntersectionWorld;
RenderShapeData intersectedShape;
- if (m_config.enableAcceleration)
+ if (m_enableAcceleration)
{
float tWorld = traverseBVH(pWorld, dWorld, intersectedShape, scene.m_bvh);
if (tWorld == FINF)
@@ -147,4 +150,53 @@ glm::vec4 RayTracer::secondaryRays(glm::vec4 pWorld, glm::vec4 dWorld, RayTraceS
}
return illumination / (float) TIMES;
-} \ No newline at end of file
+}
+
+void RayTracer::sceneChanged(QLabel* imageLabel) {
+ // RenderData metaData;
+
+ bool success = SceneParser::parse(settings.sceneFilePath, m_metaData);
+
+ if (!success) {
+ std::cerr << "Error loading scene: \"" << settings.sceneFilePath << "\"" << std::endl;
+ return;
+ }
+
+ int width = 576;
+ int height = 432;
+
+ // render the scene
+ QImage image = QImage(width, height, QImage::Format_RGBX8888);
+ image.fill(Qt::black);
+ RGBA *data = reinterpret_cast<RGBA *>(image.bits());
+
+
+
+ // RayTracer raytracer{ rtConfig };
+
+ RayTraceScene rtScene{ width, height, m_metaData };
+ this->render(data, rtScene);
+
+ QImage flippedImage = image.mirrored(false, false);
+ // make the image larger
+ flippedImage = flippedImage.scaled(2*width, 2*height, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
+ imageLabel->setPixmap(QPixmap::fromImage(flippedImage));
+}
+
+void RayTracer::settingsChanged(QLabel* imageLabel) {
+ int width = 576;
+ int height = 432;
+
+ QImage image = QImage(width, height, QImage::Format_RGBX8888);
+ image.fill(Qt::black);
+ RGBA *data = reinterpret_cast<RGBA *>(image.bits());
+
+ RayTraceScene rtScene{ width, height, m_metaData };
+ this->render(data, rtScene);
+
+ QImage flippedImage = image.mirrored(false, false);
+ flippedImage = flippedImage.scaled(2*width, 2*height, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
+ imageLabel->setPixmap(QPixmap::fromImage(flippedImage));
+}
+
+