[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>
#define LOCALLOGLEVEL DEBUG
#define LOCALLOGLEVEL INFO
class Logger {
public:

View File

@ -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) {

View File

@ -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<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->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<QString, QString>("dirLightDir", QString::number(dir.x) + "," + QString::number(dir.y) + "," + QString::number(dir.z)));
});
}