55 lines
2.3 KiB
C++
55 lines
2.3 KiB
C++
#include "main_window.hxx"
|
|
|
|
#include "ui_main_window.h"
|
|
|
|
PhotonLight::PhotonLight(QWidget* parent)
|
|
: QMainWindow(parent),
|
|
m_ui(new Ui::MainWindow) {
|
|
m_ui->setupUi(this);
|
|
updateView();
|
|
}
|
|
|
|
PhotonLight::~PhotonLight() = default;
|
|
|
|
float deg_to_rad(float val) {
|
|
return val * float(M_PI / 180);
|
|
}
|
|
|
|
void PhotonLight::updateView() {
|
|
RedrawArgs args{
|
|
.camera_position = SphericalPosition{
|
|
.yaw = deg_to_rad(m_ui->cameraYaw->value()),
|
|
.pitch = deg_to_rad(m_ui->cameraPitch->value()),
|
|
.distance = m_ui->cameraDistance->value() / 10.0f,
|
|
},
|
|
.light_position = SphericalPosition{
|
|
.yaw = deg_to_rad(m_ui->lightYaw->value()),
|
|
.pitch = deg_to_rad(m_ui->lightPitch->value()),
|
|
.distance = m_ui->lightDistance->value() / 10.0f,
|
|
},
|
|
.light_radius = 0.125,
|
|
.light_spread = 0.125,
|
|
.accum_sigma = exp10f(m_ui->accumSigma->value() / 25.0),
|
|
.accum_scale = exp10f(m_ui->accumScale->value() / 25.0),
|
|
.reflections = std::uint32_t(m_ui->reflections->value()),
|
|
.show_axes = m_ui->displayAxes->isChecked(),
|
|
.show_shapes = m_ui->displayShapes->isChecked(),
|
|
.show_hit_emission = m_ui->displayEmitted->isChecked(),
|
|
.show_miss_emission = m_ui->displayEmitted->isChecked(),
|
|
.show_direct_hit = m_ui->displayDirectHits->isChecked(),
|
|
.show_indirect_hit = m_ui->displayIndirectHits->isChecked(),
|
|
.show_light = m_ui->displayResult->isChecked(),
|
|
};
|
|
m_ui->cameraYawLabel->setText(tr("Yaw: %1 deg").arg(QString::number(qRadiansToDegrees(args.camera_position.yaw))));
|
|
m_ui->cameraPitchLabel->setText(tr("Pitch: %1 deg").arg(QString::number(qRadiansToDegrees(args.camera_position.pitch))));
|
|
m_ui->cameraDistanceLabel->setText(tr("Distance: %1").arg(QString::number(args.camera_position.distance)));
|
|
m_ui->lightYawLabel->setText(tr("Yaw: %1 deg").arg(QString::number(qRadiansToDegrees(args.light_position.yaw))));
|
|
m_ui->lightPitchLabel->setText(tr("Pitch: %1 deg").arg(QString::number(qRadiansToDegrees(args.light_position.pitch))));
|
|
m_ui->lightDistanceLabel->setText(tr("Distance: %1").arg(QString::number(args.light_position.distance)));
|
|
m_ui->accumSigmaLabel->setText(tr("Averaging radius: %1").arg(QString::number(args.accum_sigma, 'f', 3)));
|
|
m_ui->accumScaleLabel->setText(tr("Brightness: %1").arg(QString::number(args.accum_scale, 'f', 3)));
|
|
m_ui->viewport->setView(args);
|
|
}
|
|
|
|
#include "moc_main_window.cpp"
|