diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/camera/camera.cpp | 32 | ||||
-rw-r--r-- | src/camera/camera.h | 1 | ||||
-rw-r--r-- | src/mainwindow.cpp | 14 | ||||
-rw-r--r-- | src/raytracer/raytracer.cpp | 35 | ||||
-rw-r--r-- | src/raytracer/raytracer.h | 9 |
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); |