aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/camera/camera.cpp32
-rw-r--r--src/camera/camera.h1
-rw-r--r--src/mainwindow.cpp14
-rw-r--r--src/raytracer/raytracer.cpp35
-rw-r--r--src/raytracer/raytracer.h9
5 files changed, 66 insertions, 25 deletions
diff --git a/src/camera/camera.cpp b/src/camera/camera.cpp
index 1b4cd43..9e8aef2 100644
--- a/src/camera/camera.cpp
+++ b/src/camera/camera.cpp
@@ -14,9 +14,14 @@ Camera::Camera(SceneCameraData cameraData) :
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]}
+ };
}
-
glm::mat4 Camera::getViewMatrix() const {
// Optional TODO: implement the getter or make your own design
return m_viewMatrix;
@@ -53,4 +58,27 @@ float Camera::getFocalLength() const {
float Camera::getAperture() const {
// Optional TODO: implement the getter or make your own design
return m_aperture;
-} \ No newline at end of file
+}
+
+// int getPt(glm::vec3 n1 , glm::vec3 n2 , float perc )
+// {
+// int diff = n2 - n1;
+
+// return n1 + ( diff * perc );
+// }
+
+// for( float i = 0 ; i < 1 ; i += 0.01 )
+// {
+// glm::vec3 xa = getPt(P1, P2, i);
+// glm::vec3 xb = getPt(P2, P3, i);
+// glm::vec3 xc = getPt(P3, P4, i);
+
+// // Calculate points on the lines between the above points
+// glm::vec3 xm = getPt(xa, xb, i);
+// glm::vec3 xn = getPt(xb, xc, i);
+
+// // Calculate the final point on the Bezier curve
+// glm::vec3 pointOnCurve = getPt(xm, xn, i);
+
+
+// } \ No newline at end of file
diff --git a/src/camera/camera.h b/src/camera/camera.h
index 00a6733..a6e8c0a 100644
--- a/src/camera/camera.h
+++ b/src/camera/camera.h
@@ -38,6 +38,7 @@ public:
glm::vec3 getPos() const;
float cameraDepth = -1.f;
+ std::vector<glm::vec3> m_controlPoints;
private:
glm::mat4 m_viewMatrix;
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp
index fbbfa02..1adb66d 100644
--- a/src/mainwindow.cpp
+++ b/src/mainwindow.cpp
@@ -209,13 +209,13 @@ void MainWindow::initialize() {
wSlider = new QSlider(Qt::Orientation::Horizontal); // XY value slider
wSlider->setTickInterval(0.01);
- wSlider->setMinimum(-500);
- wSlider->setMaximum(500);
+ wSlider->setMinimum(-10000);
+ wSlider->setMaximum(10000);
wSlider->setValue(0);
wBox = new QDoubleSpinBox();
- wBox->setMinimum(-5.0f);
- wBox->setMaximum(5.f);
+ wBox->setMinimum(-100.0f);
+ wBox->setMaximum(100.f);
wBox->setSingleStep(0.01f);
wBox->setValue(0.f);
@@ -482,14 +482,16 @@ void MainWindow::onValChangeWSlider(int newValue) {
//wSlider->setValue(newValue);
wBox->setValue(newValue/100.f);
settings.w = wBox->value();
- rayTracer->settingsChanged(imageLabel);
+ // rayTracer->settingsChanged(imageLabel);
+ ray->wSliderChanged(imageLabel);
}
void MainWindow::onValChangeWBox(double newValue) {
wSlider->setValue(int(newValue*100.f));
//wBox->setValue(newValue);
settings.w = wBox->value();
- rayTracer->settingsChanged(imageLabel);
+ // rayTracer->settingsChanged(imageLabel);
+ ray->wSliderChanged(imageLabel);
}
void MainWindow::onRotateNegative() {
diff --git a/src/raytracer/raytracer.cpp b/src/raytracer/raytracer.cpp
index 6585e47..d9d467d 100644
--- a/src/raytracer/raytracer.cpp
+++ b/src/raytracer/raytracer.cpp
@@ -21,6 +21,11 @@ RayTracer::RayTracer(QWidget *parent) : QWidget(parent) {
m_keyMap[Qt::Key_5] = false;
m_keyMap[Qt::Key_6] = false;
+ m_width = 576;
+ m_height = 432;
+ m_depth = 500;
+
+ m_image = QImage(m_width, m_height, QImage::Format_RGBX8888);
}
// updated to use 4D
@@ -162,33 +167,24 @@ void RayTracer::sceneChanged(QLabel* imageLabel) {
if (!success) {
std::cerr << "Error loading scene: \"" << settings.sceneFilePath << "\"" << std::endl;
- // return;
- QImage image = QImage(576, 432, QImage::Format_RGBX8888);
- image.fill(Qt::black);
- RGBA *data = reinterpret_cast<RGBA *>(image.bits());
- imageLabel->setPixmap(QPixmap::fromImage(image));
+ m_image.fill(Qt::black);
+ imageLabel->setPixmap(QPixmap::fromImage(m_image));
return;
}
- int width = 576;
- int height = 432;
- int depth = 500;
-
// render the scene
- QImage image = QImage(width, height, QImage::Format_RGBX8888);
- image.fill(Qt::black);
- RGBA *data = reinterpret_cast<RGBA *>(image.bits());
+ m_imageData = reinterpret_cast<RGBA *>(m_image.bits());
+ RayTraceScene rtScene{ m_width, m_height, m_metaData, m_depth };
+ this->render(m_imageData, rtScene);
- RayTraceScene rtScene{ width, height,m_metaData, depth };
- this->render(data, rtScene);
-
- QImage flippedImage = image.mirrored(false, false);
+ QImage flippedImage = m_image.mirrored(false, false);
// make the image larger
- flippedImage = flippedImage.scaled(width, height, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
+ flippedImage = flippedImage.scaled(m_width, m_height, Qt::IgnoreAspectRatio, Qt::SmoothTransformation);
imageLabel->setPixmap(QPixmap::fromImage(flippedImage));
m_imageLabel = imageLabel;
+ // m_image = image;
}
void RayTracer::settingsChanged(QLabel* imageLabel) {
@@ -222,6 +218,11 @@ void RayTracer::settingsChanged(QLabel* imageLabel) {
// // This code will be executed after a 2-second delay
// emit rotationChanged(settings.rotation);
// });
+ m_image = image;
+}
+
+void RayTracer::wSliderChanged(QLabel* imageLabel) {
+
}
void RayTracer::keyPressEvent(QKeyEvent *event) {
diff --git a/src/raytracer/raytracer.h b/src/raytracer/raytracer.h
index 9b5bfbe..cf32a99 100644
--- a/src/raytracer/raytracer.h
+++ b/src/raytracer/raytracer.h
@@ -168,6 +168,15 @@ public:
void keyReleaseEvent(QKeyEvent *event) override;
glm::mat4 getRotationMatrix4(float angle, glm::vec3 axis3, glm::vec3 axisW);
+
+ RGBA *m_imageData;
+ RGBA *m_voxelBuffer;
+
+ int m_width;
+ int m_height;
+ int m_depth;
+
+ QImage m_image;
signals:
void xyRotationChanged(float value);
void xzRotationChanged(float value);