aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicholas Bottone <nick@bottone.io>2023-12-13 04:50:24 -0500
committerNicholas Bottone <nick@bottone.io>2023-12-13 04:50:24 -0500
commitc6c65df3122329a8748899d48ddeeb04ed23518d (patch)
tree0134c84410aeab070a11c6c825355eebbc4be74e
parent4fec8b268774f7e0159f143fb57cd1432ac16259 (diff)
Update currTimeLabel and emit timeValueChanged signal
-rw-r--r--src/mainwindow.cpp13
-rw-r--r--src/mainwindow.h2
-rw-r--r--src/raytracer/raytracer.cpp38
-rw-r--r--src/raytracer/raytracer.h1
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);
};