[UI][FIX] Fix direction light setting

- fix dir light not turning off
- fix dir light direction slider malfunctioning
This commit is contained in:
Linloir 2022-12-20 12:27:04 +08:00
parent 14f7c8b33a
commit 830522ef79
No known key found for this signature in database
GPG Key ID: 58EEB209A0F2C366
3 changed files with 12 additions and 12 deletions

View File

@ -2,7 +2,7 @@
#include <iostream> #include <iostream>
#define LOCALLOGLEVEL DEBUG #define LOCALLOGLEVEL INFO
class Logger { class Logger {
public: public:

View File

@ -229,7 +229,7 @@ void SceneViewer::paintGL() {
_dirLight->updateShader(_shaderProgram, 0); _dirLight->updateShader(_shaderProgram, 0);
} }
_shaderProgram.setUniform("dirlightnr", _dirLight != nullptr ? 1 : 0); _shaderProgram.setUniform("dirlightnr", _dirLight != nullptr && _dirLightOn ? 1 : 0);
// Render objects // Render objects
for (auto object : _objects) { for (auto object : _objects) {

View File

@ -162,7 +162,7 @@ SettingPage::SettingPage(QWidget* parent) :
}); });
_dirLightTheta = new ModelAttributeSlide("Rotate\u03B8", 0, 360, 3600, _mainWidget); _dirLightTheta = new ModelAttributeSlide("Rotate\u03B8", 0, 360, 3600, _mainWidget);
_dirLightTheta->setValue(0); _dirLightTheta->setValue(270);
_dirLightTheta->setEnabled(false); _dirLightTheta->setEnabled(false);
_mainLayout->addWidget(_dirLightTheta); _mainLayout->addWidget(_dirLightTheta);
_dirLightTheta->show(); _dirLightTheta->show();
@ -170,15 +170,15 @@ SettingPage::SettingPage(QWidget* parent) :
// Calculate direction vector by theta and phi // Calculate direction vector by theta and phi
float theta = _dirLightTheta->val(); // theta angle float theta = _dirLightTheta->val(); // theta angle
float phi = _dirLightPhi->val(); // phi angle float phi = _dirLightPhi->val(); // phi angle
float x = sin(theta) * cos(phi); float x = sin(glm::radians(phi)) * cos(glm::radians(theta));
float y = sin(theta) * sin(phi); float y = sin(glm::radians(phi)) * sin(glm::radians(theta));
float z = cos(theta); float z = cos(glm::radians(phi));
glm::vec3 dir = glm::vec3(x, y, z); glm::vec3 dir = glm::normalize(glm::vec3(x, y, z));
emit onSettingsChanged(QPair<QString, QString>("dirLightDir", QString::number(dir.x) + "," + QString::number(dir.y) + "," + QString::number(dir.z))); emit onSettingsChanged(QPair<QString, QString>("dirLightDir", QString::number(dir.x) + "," + QString::number(dir.y) + "," + QString::number(dir.z)));
}); });
_dirLightPhi = new ModelAttributeSlide("Rotate\u03C6", 0, 360, 3600, _mainWidget); _dirLightPhi = new ModelAttributeSlide("Rotate\u03C6", 0, 360, 3600, _mainWidget);
_dirLightPhi->setValue(0); _dirLightPhi->setValue(90);
_dirLightPhi->setEnabled(false); _dirLightPhi->setEnabled(false);
_mainLayout->addWidget(_dirLightPhi); _mainLayout->addWidget(_dirLightPhi);
_dirLightPhi->show(); _dirLightPhi->show();
@ -186,10 +186,10 @@ SettingPage::SettingPage(QWidget* parent) :
// Calculate direction vector by theta and phi // Calculate direction vector by theta and phi
float theta = _dirLightTheta->val(); // theta angle float theta = _dirLightTheta->val(); // theta angle
float phi = _dirLightPhi->val(); // phi angle float phi = _dirLightPhi->val(); // phi angle
float x = sin(theta) * cos(phi); float x = sin(glm::radians(phi)) * cos(glm::radians(theta));
float y = sin(theta) * sin(phi); float y = sin(glm::radians(phi)) * sin(glm::radians(theta));
float z = cos(theta); float z = cos(glm::radians(phi));
glm::vec3 dir = glm::vec3(x, y, z); glm::vec3 dir = glm::normalize(glm::vec3(x, y, z));
emit onSettingsChanged(QPair<QString, QString>("dirLightDir", QString::number(dir.x) + "," + QString::number(dir.y) + "," + QString::number(dir.z))); emit onSettingsChanged(QPair<QString, QString>("dirLightDir", QString::number(dir.x) + "," + QString::number(dir.y) + "," + QString::number(dir.z)));
}); });
} }