aboutsummaryrefslogtreecommitdiff
path: root/src/raytracer/raytracer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/raytracer/raytracer.cpp')
-rw-r--r--src/raytracer/raytracer.cpp174
1 files changed, 173 insertions, 1 deletions
diff --git a/src/raytracer/raytracer.cpp b/src/raytracer/raytracer.cpp
index 93f5225..435af74 100644
--- a/src/raytracer/raytracer.cpp
+++ b/src/raytracer/raytracer.cpp
@@ -5,6 +5,8 @@
#include "raytracescene.h"
#include "settings.h"
#include "mainwindow.h"
+#include <QKeyEvent>
+#include <QTimerEvent>
//struct Ray {
// glm::vec3 p;
@@ -12,7 +14,20 @@
//};
// RayTracer::RayTracer(const Config &config) : m_config(config) {}
-RayTracer::RayTracer(QWidget *parent) : QWidget(parent) {}
+RayTracer::RayTracer(QWidget *parent) : QWidget(parent) {
+ setFocusPolicy(Qt::StrongFocus);
+
+ // map the 1 key
+ m_keyMap[Qt::Key_1] = false;
+ m_keyMap[Qt::Key_2] = false;
+ m_keyMap[Qt::Key_3] = false;
+ m_keyMap[Qt::Key_4] = false;
+ m_keyMap[Qt::Key_5] = false;
+ m_keyMap[Qt::Key_6] = false;
+
+ // m_timer = startTimer(1000/60);
+ // m_elapsedTimer.start();
+}
void RayTracer::render(RGBA *imageData, const RayTraceScene &scene) {
if(m_enableParallelism)
@@ -181,6 +196,8 @@ void RayTracer::sceneChanged(QLabel* imageLabel) {
// make the image larger
flippedImage = flippedImage.scaled(2*width, 2*height, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
imageLabel->setPixmap(QPixmap::fromImage(flippedImage));
+
+ m_imageLabel = imageLabel;
}
void RayTracer::settingsChanged(QLabel* imageLabel) {
@@ -199,4 +216,159 @@ void RayTracer::settingsChanged(QLabel* imageLabel) {
imageLabel->setPixmap(QPixmap::fromImage(flippedImage));
}
+void RayTracer::keyPressEvent(QKeyEvent *event) {
+ m_keyMap[Qt::Key(event->key())] = true;
+ std::cout << "key pressed" << std::endl;
+ if (m_keyMap[Qt::Key_1]) {
+ std::cout << "key 1" << std::endl;
+ if (settings.negative) {
+ settings.xy -= settings.rotation;
+ } else {
+ settings.xy += settings.rotation;
+ }
+ emit xyRotationChanged(settings.xy);
+ }
+
+ if (m_keyMap[Qt::Key_2]) {
+ if (settings.negative) {
+ settings.xz -= settings.rotation;
+ } else {
+ settings.xz += settings.rotation;
+ }
+ emit xzRotationChanged(settings.xz);
+ }
+
+ if (m_keyMap[Qt::Key_3]) {
+ if (settings.negative) {
+ settings.xw -= settings.rotation;
+ } else {
+ settings.xw += settings.rotation;
+ }
+ emit xwRotationChanged(settings.xw);
+ }
+
+ if (m_keyMap[Qt::Key_4]) {
+ if (settings.negative) {
+ settings.yz -= settings.rotation;
+ } else {
+ settings.yz += settings.rotation;
+ }
+ emit yzRotationChanged(settings.yz);
+ }
+
+ if (m_keyMap[Qt::Key_5]) {
+ if (settings.negative) {
+ settings.yw -= settings.rotation;
+ } else {
+ settings.yw += settings.rotation;
+ }
+ emit ywRotationChanged(settings.yw);
+ }
+
+ if (m_keyMap[Qt::Key_6]) {
+ if (settings.negative) {
+ settings.zw -= settings.rotation;
+ } else {
+ settings.zw += settings.rotation;
+ }
+ emit zwRotationChanged(settings.zw);
+ }
+
+
+ // std::cout << "key done" << std::endl;
+
+ // 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);
+
+ // std::cout << "done rendering" << std::endl;
+
+ // QImage flippedImage = image.mirrored(false, false);
+ // flippedImage = flippedImage.scaled(2*width, 2*height, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
+ // m_imageLabel->setPixmap(QPixmap::fromImage(flippedImage));
+}
+
+void RayTracer::keyReleaseEvent(QKeyEvent *event) {
+ m_keyMap[Qt::Key(event->key())] = false;
+}
+
+// void RayTracer::timerEvent(QTimerEvent *event) {
+// int elapsedms = m_elapsedTimer.elapsed();
+// float deltaTime = elapsedms * 0.001f;
+// m_elapsedTimer.restart();
+
+// if (m_keyMap[Qt::Key_1]) {
+// if (settings.negative) {
+// settings.xy -= settings.rotation;
+// } else {
+// settings.xy += settings.rotation;
+// }
+// emit xyRotationChanged(settings.xy);
+// }
+
+// if (m_keyMap[Qt::Key_2]) {
+// if (settings.negative) {
+// settings.xz -= settings.rotation;
+// } else {
+// settings.xz += settings.rotation;
+// }
+// emit xzRotationChanged(settings.xz);
+// }
+
+// if (m_keyMap[Qt::Key_3]) {
+// if (settings.negative) {
+// settings.xw -= settings.rotation;
+// } else {
+// settings.xw += settings.rotation;
+// }
+// emit xwRotationChanged(settings.xw);
+// }
+
+// if (m_keyMap[Qt::Key_4]) {
+// if (settings.negative) {
+// settings.yz -= settings.rotation;
+// } else {
+// settings.yz += settings.rotation;
+// }
+// emit yzRotationChanged(settings.yz);
+// }
+
+// if (m_keyMap[Qt::Key_5]) {
+// if (settings.negative) {
+// settings.yw -= settings.rotation;
+// } else {
+// settings.yw += settings.rotation;
+// }
+// emit ywRotationChanged(settings.yw);
+// }
+
+// if (m_keyMap[Qt::Key_6]) {
+// if (settings.negative) {
+// settings.zw -= settings.rotation;
+// } else {
+// settings.zw += settings.rotation;
+// }
+// emit zwRotationChanged(settings.zw);
+// }
+
+// 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);
+// m_imageLabel->setPixmap(QPixmap::fromImage(flippedImage));
+// }