diff --git a/FinalProject/lightCaster.cpp b/FinalProject/lightCaster.cpp index 836d0a4..8fddfa1 100644 --- a/FinalProject/lightCaster.cpp +++ b/FinalProject/lightCaster.cpp @@ -11,6 +11,7 @@ Illuminant::Illuminant(){ Illuminant::Illuminant(glm::vec3 position, LightType lightType){ _position = position; setType(lightType); + Logger::info("55555555555"); } // set up with one color 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; _specular = color; setType(lightType); + Logger::info("4444444444444444444"); } //set up by assign all colors Illuminant::Illuminant(glm::vec3 position, glm::vec3 ambient, @@ -28,7 +30,9 @@ Illuminant::Illuminant(glm::vec3 position, glm::vec3 ambient, _diffuse = diffuse; _specular = specular; setType(lightType); + Logger::info("333333333333333"); } + // set up with one color,建议平行光源使用这个 Illuminant::Illuminant(LightType lightType, glm::vec3 direction, glm::vec3 color) { _direction = direction; @@ -36,6 +40,7 @@ Illuminant::Illuminant(LightType lightType, glm::vec3 direction, glm::vec3 color _diffuse = color * 0.8f; _specular = color; setType(lightType); + Logger::info("22222222222222222"); } // set up with one color,建议聚光灯光源使用这个 @@ -46,6 +51,7 @@ Illuminant::Illuminant(glm::vec3 position, glm::vec3 direction, glm::vec3 color, _diffuse = color * 0.8f; _specular = color; setType(lightType); + Logger::info("1111111111111111111"); } Illuminant::~Illuminant() { @@ -119,6 +125,7 @@ void Illuminant::setType(LightType type){ } void Illuminant::updateLight(ShaderProgram& shader) { + lastShader = &shader; if (_lightType == dir) { // directional light shader.setUniform("dirLight.direction", _direction); @@ -170,17 +177,14 @@ void init_queue() { Logger::info("23533423q543"); } } -double r = 1; -// 初始设置所有变量 +// 如果uniform变量没有被设置,可能会出现不可预知的后果! void setAllLigntUniform(ShaderProgram& shader) { - r = r + 1; - double rr = sin(r / 20)*8; - shader.setUniform("dirLight.direction",0,1,0); - shader.setUniform("dirLight.ambient", 0.0f, 0.0f, 0.0f); - shader.setUniform("dirLight.diffuse", 0.0f, 100.0f, 220.0f); - shader.setUniform("dirLight.specular", 00.0f, 0.0f, 0.0f); + shader.setUniform("dirLight.direction",0,0,-1); + shader.setUniform("dirLight.ambient", 0.1f, 0.1f, 0.1f); + shader.setUniform("dirLight.diffuse", 0.0f, 0.0f, 0.0f); + shader.setUniform("dirLight.specular", 0.0f, 0.0f, 0.0f); // point light 1 shader.setUniform("pointLights[0].position", 0, 0, 0); diff --git a/FinalProject/lightCaster.h b/FinalProject/lightCaster.h index 986becf..5a53e4a 100644 --- a/FinalProject/lightCaster.h +++ b/FinalProject/lightCaster.h @@ -16,7 +16,7 @@ public: private: 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 _ambient = glm::vec3(0.05f, 0.05f, 0.05f); glm::vec3 _diffuse = glm::vec3(0.8f, 0.8f, 0.8f); diff --git a/FinalProject/sceneviewer.cpp b/FinalProject/sceneviewer.cpp index ef8448b..bb039bf 100644 --- a/FinalProject/sceneviewer.cpp +++ b/FinalProject/sceneviewer.cpp @@ -21,7 +21,6 @@ void copyFile(std::string name) { SceneViewer::SceneViewer(QWidget* parent) : QOpenGLWidget(parent) { - _illuminants.push_back(Illuminant()); QSurfaceFormat format; format.setProfile(QSurfaceFormat::CoreProfile); format.setVersion(4, 3); @@ -82,7 +81,12 @@ void SceneViewer::initializeGL() { setAllLigntUniform(_shaderProgram); 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"); 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) { _illuminants.push_back(Illuminant(position,direction, color, Illuminant::LightType::spot)); +} +void SceneViewer::deleteLight(int index) { + _illuminants.erase(_illuminants.begin() + index); } \ No newline at end of file diff --git a/FinalProject/sceneviewer.h b/FinalProject/sceneviewer.h index 9f47fc4..857e089 100644 --- a/FinalProject/sceneviewer.h +++ b/FinalProject/sceneviewer.h @@ -48,6 +48,8 @@ public: void addDirLight(glm::vec3 direction, glm::vec3 color); void addPointLight(glm::vec3 position, glm::vec3 color); void addSpotLight(glm::vec3 direction,glm::vec3 position, glm::vec3 color); + // 删除给定的数组下标 + void deleteLight(int index); protected: // OpenGL functions