From 830522ef7903362d64bc342b06c4f1a41f5a7ad1 Mon Sep 17 00:00:00 2001 From: Linloir <3145078758@qq.com> Date: Tue, 20 Dec 2022 12:27:04 +0800 Subject: [PATCH] [UI][FIX] Fix direction light setting - fix dir light not turning off - fix dir light direction slider malfunctioning --- FinalProject/logger.h | 2 +- FinalProject/sceneviewer.cpp | 2 +- FinalProject/settingpage.cpp | 20 ++++++++++---------- 3 files changed, 12 insertions(+), 12 deletions(-) diff --git a/FinalProject/logger.h b/FinalProject/logger.h index da6290b..8fd9a23 100644 --- a/FinalProject/logger.h +++ b/FinalProject/logger.h @@ -2,7 +2,7 @@ #include -#define LOCALLOGLEVEL DEBUG +#define LOCALLOGLEVEL INFO class Logger { public: diff --git a/FinalProject/sceneviewer.cpp b/FinalProject/sceneviewer.cpp index 9f8f2ba..2fb02ce 100644 --- a/FinalProject/sceneviewer.cpp +++ b/FinalProject/sceneviewer.cpp @@ -229,7 +229,7 @@ void SceneViewer::paintGL() { _dirLight->updateShader(_shaderProgram, 0); } - _shaderProgram.setUniform("dirlightnr", _dirLight != nullptr ? 1 : 0); + _shaderProgram.setUniform("dirlightnr", _dirLight != nullptr && _dirLightOn ? 1 : 0); // Render objects for (auto object : _objects) { diff --git a/FinalProject/settingpage.cpp b/FinalProject/settingpage.cpp index d92fd9d..e2e674d 100644 --- a/FinalProject/settingpage.cpp +++ b/FinalProject/settingpage.cpp @@ -162,7 +162,7 @@ SettingPage::SettingPage(QWidget* parent) : }); _dirLightTheta = new ModelAttributeSlide("Rotate\u03B8", 0, 360, 3600, _mainWidget); - _dirLightTheta->setValue(0); + _dirLightTheta->setValue(270); _dirLightTheta->setEnabled(false); _mainLayout->addWidget(_dirLightTheta); _dirLightTheta->show(); @@ -170,15 +170,15 @@ SettingPage::SettingPage(QWidget* parent) : // Calculate direction vector by theta and phi float theta = _dirLightTheta->val(); // theta angle float phi = _dirLightPhi->val(); // phi angle - float x = sin(theta) * cos(phi); - float y = sin(theta) * sin(phi); - float z = cos(theta); - glm::vec3 dir = glm::vec3(x, y, z); + float x = sin(glm::radians(phi)) * cos(glm::radians(theta)); + float y = sin(glm::radians(phi)) * sin(glm::radians(theta)); + float z = cos(glm::radians(phi)); + glm::vec3 dir = glm::normalize(glm::vec3(x, y, z)); emit onSettingsChanged(QPair("dirLightDir", QString::number(dir.x) + "," + QString::number(dir.y) + "," + QString::number(dir.z))); }); _dirLightPhi = new ModelAttributeSlide("Rotate\u03C6", 0, 360, 3600, _mainWidget); - _dirLightPhi->setValue(0); + _dirLightPhi->setValue(90); _dirLightPhi->setEnabled(false); _mainLayout->addWidget(_dirLightPhi); _dirLightPhi->show(); @@ -186,10 +186,10 @@ SettingPage::SettingPage(QWidget* parent) : // Calculate direction vector by theta and phi float theta = _dirLightTheta->val(); // theta angle float phi = _dirLightPhi->val(); // phi angle - float x = sin(theta) * cos(phi); - float y = sin(theta) * sin(phi); - float z = cos(theta); - glm::vec3 dir = glm::vec3(x, y, z); + float x = sin(glm::radians(phi)) * cos(glm::radians(theta)); + float y = sin(glm::radians(phi)) * sin(glm::radians(theta)); + float z = cos(glm::radians(phi)); + glm::vec3 dir = glm::normalize(glm::vec3(x, y, z)); emit onSettingsChanged(QPair("dirLightDir", QString::number(dir.x) + "," + QString::number(dir.y) + "," + QString::number(dir.z))); }); }