add interface in sceneviewer

This commit is contained in:
ayachi3 2022-12-17 00:32:24 +08:00
parent f26402461a
commit f62b15eabd
4 changed files with 24 additions and 11 deletions

View File

@ -11,6 +11,7 @@ Illuminant::Illuminant(){
Illuminant::Illuminant(glm::vec3 position, LightType lightType){ Illuminant::Illuminant(glm::vec3 position, LightType lightType){
_position = position; _position = position;
setType(lightType); setType(lightType);
Logger::info("55555555555");
} }
// set up with one color // set up with one color
Illuminant::Illuminant(glm::vec3 position, glm::vec3 color, LightType lightType){ Illuminant::Illuminant(glm::vec3 position, glm::vec3 color, LightType lightType){
@ -19,6 +20,7 @@ Illuminant::Illuminant(glm::vec3 position, glm::vec3 color, LightType lightType)
_diffuse = color * 0.8f; _diffuse = color * 0.8f;
_specular = color; _specular = color;
setType(lightType); setType(lightType);
Logger::info("4444444444444444444");
} }
//set up by assign all colors //set up by assign all colors
Illuminant::Illuminant(glm::vec3 position, glm::vec3 ambient, Illuminant::Illuminant(glm::vec3 position, glm::vec3 ambient,
@ -28,7 +30,9 @@ Illuminant::Illuminant(glm::vec3 position, glm::vec3 ambient,
_diffuse = diffuse; _diffuse = diffuse;
_specular = specular; _specular = specular;
setType(lightType); setType(lightType);
Logger::info("333333333333333");
} }
// set up with one color建议平行光源使用这个 // set up with one color建议平行光源使用这个
Illuminant::Illuminant(LightType lightType, glm::vec3 direction, glm::vec3 color) { Illuminant::Illuminant(LightType lightType, glm::vec3 direction, glm::vec3 color) {
_direction = direction; _direction = direction;
@ -36,6 +40,7 @@ Illuminant::Illuminant(LightType lightType, glm::vec3 direction, glm::vec3 color
_diffuse = color * 0.8f; _diffuse = color * 0.8f;
_specular = color; _specular = color;
setType(lightType); setType(lightType);
Logger::info("22222222222222222");
} }
// set up with one color建议聚光灯光源使用这个 // set up with one color建议聚光灯光源使用这个
@ -46,6 +51,7 @@ Illuminant::Illuminant(glm::vec3 position, glm::vec3 direction, glm::vec3 color,
_diffuse = color * 0.8f; _diffuse = color * 0.8f;
_specular = color; _specular = color;
setType(lightType); setType(lightType);
Logger::info("1111111111111111111");
} }
Illuminant::~Illuminant() { Illuminant::~Illuminant() {
@ -119,6 +125,7 @@ void Illuminant::setType(LightType type){
} }
void Illuminant::updateLight(ShaderProgram& shader) { void Illuminant::updateLight(ShaderProgram& shader) {
lastShader = &shader;
if (_lightType == dir) { if (_lightType == dir) {
// directional light // directional light
shader.setUniform("dirLight.direction", _direction); shader.setUniform("dirLight.direction", _direction);
@ -170,17 +177,14 @@ void init_queue() {
Logger::info("23533423q543"); Logger::info("23533423q543");
} }
} }
double r = 1;
// 初始设置所有变量 // 如果uniform变量没有被设置可能会出现不可预知的后果
void setAllLigntUniform(ShaderProgram& shader) { void setAllLigntUniform(ShaderProgram& shader) {
r = r + 1;
double rr = sin(r / 20)*8;
shader.setUniform("dirLight.direction",0,1,0); shader.setUniform("dirLight.direction",0,0,-1);
shader.setUniform("dirLight.ambient", 0.0f, 0.0f, 0.0f); shader.setUniform("dirLight.ambient", 0.1f, 0.1f, 0.1f);
shader.setUniform("dirLight.diffuse", 0.0f, 100.0f, 220.0f); shader.setUniform("dirLight.diffuse", 0.0f, 0.0f, 0.0f);
shader.setUniform("dirLight.specular", 00.0f, 0.0f, 0.0f); shader.setUniform("dirLight.specular", 0.0f, 0.0f, 0.0f);
// point light 1 // point light 1
shader.setUniform("pointLights[0].position", 0, 0, 0); shader.setUniform("pointLights[0].position", 0, 0, 0);

View File

@ -16,7 +16,7 @@ public:
private: private:
LightType _lightType = dir; LightType _lightType = dir;
glm::vec3 _direction = glm::vec3(0,2,-1); glm::vec3 _direction = glm::vec3(0,0,-1);
glm::vec3 _position = glm::vec3(0.0f); glm::vec3 _position = glm::vec3(0.0f);
glm::vec3 _ambient = glm::vec3(0.05f, 0.05f, 0.05f); glm::vec3 _ambient = glm::vec3(0.05f, 0.05f, 0.05f);
glm::vec3 _diffuse = glm::vec3(0.8f, 0.8f, 0.8f); glm::vec3 _diffuse = glm::vec3(0.8f, 0.8f, 0.8f);

View File

@ -21,7 +21,6 @@ void copyFile(std::string name) {
SceneViewer::SceneViewer(QWidget* parent) SceneViewer::SceneViewer(QWidget* parent)
: QOpenGLWidget(parent) : QOpenGLWidget(parent)
{ {
_illuminants.push_back(Illuminant());
QSurfaceFormat format; QSurfaceFormat format;
format.setProfile(QSurfaceFormat::CoreProfile); format.setProfile(QSurfaceFormat::CoreProfile);
format.setVersion(4, 3); format.setVersion(4, 3);
@ -82,7 +81,12 @@ void SceneViewer::initializeGL() {
setAllLigntUniform(_shaderProgram); setAllLigntUniform(_shaderProgram);
init_queue(); init_queue();
// ÉèÖùâÕÕ // ÉèÖùâÕÕ
addDirLight(glm::vec3(0.3, 0.5, -1), glm::vec3(0.2, 0.1, 0.2));
addSpotLight(glm::vec3(0.3, 0.5, -1), glm::vec3(-0.3, -0.5, 3), glm::vec3(0.2, 1, 0.1));
addPointLight(glm::vec3(0.5, 0.9, 0.4), glm::vec3(1, 0.2, 0.4));
addPointLight(glm::vec3(-0.3, -0.9, 0.4), glm::vec3(0, 0.2, 0.9));
//deleteLight(1);
Model* backpackModel = new Model("D:\\code\\ComputerGraphic\\backpack\\backpack.obj"); Model* backpackModel = new Model("D:\\code\\ComputerGraphic\\backpack\\backpack.obj");
Logger::info("Model loaded"); Logger::info("Model loaded");
@ -212,4 +216,7 @@ void SceneViewer::addPointLight(glm::vec3 position, glm::vec3 color) {
} }
void SceneViewer::addSpotLight(glm::vec3 direction, glm::vec3 position, glm::vec3 color) { void SceneViewer::addSpotLight(glm::vec3 direction, glm::vec3 position, glm::vec3 color) {
_illuminants.push_back(Illuminant(position,direction, color, Illuminant::LightType::spot)); _illuminants.push_back(Illuminant(position,direction, color, Illuminant::LightType::spot));
}
void SceneViewer::deleteLight(int index) {
_illuminants.erase(_illuminants.begin() + index);
} }

View File

@ -48,6 +48,8 @@ public:
void addDirLight(glm::vec3 direction, glm::vec3 color); void addDirLight(glm::vec3 direction, glm::vec3 color);
void addPointLight(glm::vec3 position, glm::vec3 color); void addPointLight(glm::vec3 position, glm::vec3 color);
void addSpotLight(glm::vec3 direction,glm::vec3 position, glm::vec3 color); void addSpotLight(glm::vec3 direction,glm::vec3 position, glm::vec3 color);
// 删除给定的数组下标
void deleteLight(int index);
protected: protected:
// OpenGL functions // OpenGL functions