diff options
author | Nicholas Bottone <nick@bottone.io> | 2023-12-13 04:50:24 -0500 |
---|---|---|
committer | Nicholas Bottone <nick@bottone.io> | 2023-12-13 04:50:24 -0500 |
commit | c6c65df3122329a8748899d48ddeeb04ed23518d (patch) | |
tree | 0134c84410aeab070a11c6c825355eebbc4be74e /src | |
parent | 4fec8b268774f7e0159f143fb57cd1432ac16259 (diff) |
Update currTimeLabel and emit timeValueChanged signal
Diffstat (limited to 'src')
-rw-r--r-- | src/mainwindow.cpp | 13 | ||||
-rw-r--r-- | src/mainwindow.h | 2 | ||||
-rw-r--r-- | src/raytracer/raytracer.cpp | 38 | ||||
-rw-r--r-- | src/raytracer/raytracer.h | 1 |
4 files changed, 38 insertions, 16 deletions
diff --git a/src/mainwindow.cpp b/src/mainwindow.cpp index cb6b7a4..cc54ed5 100644 --- a/src/mainwindow.cpp +++ b/src/mainwindow.cpp @@ -47,9 +47,9 @@ void MainWindow::initialize() { w_label->setText("W value:"); w_label->setFont(font); - QLabel *curr_time_label = new QLabel(); // Current Time label - curr_time_label->setText("Curr Time: 0"); - curr_time_label->setFont(font); + currTimeLabel = new QLabel(); // Current Time label + currTimeLabel->setText("Curr Time: 0"); + currTimeLabel->setFont(font); QLabel *max_time_label = new QLabel(); // Max Time label max_time_label->setText("Max Time:"); @@ -250,7 +250,7 @@ void MainWindow::initialize() { vLayout->addWidget(zwLayout); vLayout->addWidget(w_label); vLayout->addWidget(wLayout); - vLayout->addWidget(curr_time_label); + vLayout->addWidget(currTimeLabel); vLayout->addWidget(max_time_label); vLayout->addWidget(maxTimeGroupBox); @@ -287,6 +287,7 @@ void MainWindow::connectUIElements() { connect(rayTracer, &RayTracer::zwRotationChanged, this, &MainWindow::updateZwSlider); connect(rayTracer, &RayTracer::rotationChanged, this, &MainWindow::updateRotationSlider); // connect(rayTracer, &RayTracer::cameraPositionChanged, this, &MainWindow::updateCameraPosition); + connect(rayTracer, &RayTracer::timeValueChanged, this, &MainWindow::updateTimeValue); connectW(); } @@ -568,3 +569,7 @@ void MainWindow::updateRotationSlider(float value) { // void MainWindow::updateCameraPosition() { // rayTracer->wSliderChanged(imageLabel); // } + +void MainWindow::updateTimeValue() { + currTimeLabel->setText("Curr Time: " + QString::number(settings.currentTime)); +} diff --git a/src/mainwindow.h b/src/mainwindow.h index d8a1dc1..b608dd5 100644 --- a/src/mainwindow.h +++ b/src/mainwindow.h @@ -56,6 +56,7 @@ private: QPushButton *rotateNegative; QSlider *wSlider; QDoubleSpinBox *wBox; + QLabel *currTimeLabel; private slots: @@ -87,4 +88,5 @@ private slots: void onValChangeWSlider(int newValue); void onValChangeWBox(double newValue); // void updateCameraPosition(); + void updateTimeValue(); }; diff --git a/src/raytracer/raytracer.cpp b/src/raytracer/raytracer.cpp index 734cbe7..1918493 100644 --- a/src/raytracer/raytracer.cpp +++ b/src/raytracer/raytracer.cpp @@ -2,6 +2,7 @@ #include <QtConcurrent> #include <iostream> #include <cstdlib> +#include <iomanip> #include "raytracer.h" #include "raytracescene.h" #include "settings.h" @@ -43,17 +44,21 @@ void RayTracer::render(RGBA *imageData, const RayTraceScene &scene) { if (settings.bulkOutputFolderPath.size() > 0) { // means we are doing bulk rendering // save the image to the bulk directory - std::string filePath = settings.bulkOutputFolderPath + QDir::separator().toLatin1() + std::to_string(settings.currentTime) + ".png"; + std::string paddedTime = std::to_string(settings.currentTime); + paddedTime = std::string(4 - paddedTime.length(), '0') + paddedTime; + std::string filePath = settings.bulkOutputFolderPath + QDir::separator().toLatin1() + paddedTime + ".png"; saveViewportImage(filePath); if (settings.currentTime < settings.maxTime) { // still more to render // render the next frame settings.currentTime++; + settings.w++; emit settingsChanged(m_imageLabel); // emit to allow the UI to update then render the next frame } else { // done rendering // assemble the video saveFFMPEGVideo(settings.bulkOutputFolderPath); settings.currentTime = 0; settings.bulkOutputFolderPath = ""; + emit settingsChanged(m_imageLabel); } } emit cameraPositionChanged(m_metaData.cameraData.pos); @@ -207,7 +212,9 @@ void RayTracer::sceneChanged(QLabel* imageLabel) { // } void RayTracer::settingsChanged(QLabel* imageLabel) { - bool success = SceneParser::parse(settings.sceneFilePath, m_metaData); + emit timeValueChanged(settings.currentTime); + + bool success = SceneParser::parse(settings.sceneFilePath, m_metaData); // FIXME: this is a hack to get the camera position if (!success) { std::cerr << "Error loading scene: \"" << settings.sceneFilePath << "\"" << std::endl; @@ -218,9 +225,16 @@ void RayTracer::settingsChanged(QLabel* imageLabel) { RGBA *data = reinterpret_cast<RGBA *>(image.bits()); m_imageData = data; imageLabel->setPixmap(QPixmap::fromImage(image)); - return; } + // if (settings.sceneFilePath.size() == 0) { + // // no scene loaded + // m_image.fill(Qt::black); + // imageLabel->setPixmap(QPixmap::fromImage(m_image)); + // m_imageData = reinterpret_cast<RGBA *>(m_image.bits()); + // return; + // } + int width = 576; int height = 432; @@ -239,17 +253,17 @@ void RayTracer::settingsChanged(QLabel* imageLabel) { auto P3 = m_controlPoints[settings.currentTime]; auto P4 = m_controlPoints[settings.currentTime]; - glm::vec4 xa = getPt(P1, P2, settings.currentTime); - glm::vec4 xb = getPt(P2, P3, settings.currentTime); - glm::vec4 xc = getPt(P3, P4, settings.currentTime); + // glm::vec4 xa = getPt(P1, P2, settings.currentTime); + // glm::vec4 xb = getPt(P2, P3, settings.currentTime); + // glm::vec4 xc = getPt(P3, P4, settings.currentTime); - // Calculate points on the lines between the above points - glm::vec4 xm = getPt(xa, xb, settings.currentTime); - glm::vec4 xn = getPt(xb, xc, settings.currentTime); + // // Calculate points on the lines between the above points + // glm::vec4 xm = getPt(xa, xb, settings.currentTime); + // glm::vec4 xn = getPt(xb, xc, settings.currentTime); - // Calculate the final point on the Bezier curve - glm::vec4 pointOnCurve = getPt(xm, xn, settings.currentTime); - m_metaData.cameraData.pos = pointOnCurve; + // // Calculate the final point on the Bezier curve + // glm::vec4 pointOnCurve = getPt(xm, xn, settings.currentTime); + // m_metaData.cameraData.pos = pointOnCurve; settings.xy += 4.f; if (m_controlPointIndex % 1 == 0) { diff --git a/src/raytracer/raytracer.h b/src/raytracer/raytracer.h index ee46668..1d88de9 100644 --- a/src/raytracer/raytracer.h +++ b/src/raytracer/raytracer.h @@ -193,5 +193,6 @@ signals: void zwRotationChanged(float value); void rotationChanged(float value); void cameraPositionChanged(glm::vec3 value); + void timeValueChanged(int value); }; |