From df803c8deaa1910bf4e870cb3e4a3180f170496d Mon Sep 17 00:00:00 2001 From: ayachi3 <1592757525@qq.com> Date: Thu, 15 Dec 2022 11:23:52 +0800 Subject: [PATCH] add light and change shader --- FinalProject/fragmentshader.fs | 2 ++ FinalProject/lightCaster.cpp | 2 ++ FinalProject/lightCaster.h | 9 +++++++++ FinalProject/sceneviewer.cpp | 7 +++++++ 4 files changed, 20 insertions(+) diff --git a/FinalProject/fragmentshader.fs b/FinalProject/fragmentshader.fs index 556286e..229dce5 100644 --- a/FinalProject/fragmentshader.fs +++ b/FinalProject/fragmentshader.fs @@ -5,9 +5,11 @@ in vec2 TexCoords; uniform sampler2D texture_diffuse1; uniform sampler2D texture_specular1; +uniform vec3 lightColor; void main() { FragColor = texture(texture_specular1, TexCoords); FragColor = texture(texture_diffuse1, TexCoords); + FragColor = vec4(FragColor * vec4(lightColor,1.0f)); } \ No newline at end of file diff --git a/FinalProject/lightCaster.cpp b/FinalProject/lightCaster.cpp index e69de29..4e6e08d 100644 --- a/FinalProject/lightCaster.cpp +++ b/FinalProject/lightCaster.cpp @@ -0,0 +1,2 @@ +#include"lightCaster.h" + diff --git a/FinalProject/lightCaster.h b/FinalProject/lightCaster.h index 6f70f09..e01b132 100644 --- a/FinalProject/lightCaster.h +++ b/FinalProject/lightCaster.h @@ -1 +1,10 @@ #pragma once +#include"shader.h" + +// 发光物不需要纹理,所以说需要另外的shader +// 在sceneviewer中被包含 +class LightCaster { +public: + LightCaster() {}; + +}; \ No newline at end of file diff --git a/FinalProject/sceneviewer.cpp b/FinalProject/sceneviewer.cpp index 406b3f9..0f12183 100644 --- a/FinalProject/sceneviewer.cpp +++ b/FinalProject/sceneviewer.cpp @@ -87,6 +87,13 @@ void SceneViewer::paintGL() { glm::mat4 projection = glm::perspective(glm::radians(_camera.zoomVal()), (float)width() / (float)height(), 0.1f, 100.0f); _shaderProgram.setUniform("view", view); _shaderProgram.setUniform("projection", projection); + + + ///////////////////////////////////////最终不应该放在这里 + _shaderProgram.setUniform("lightColor", 0.0f, 1.0f, 0.0f); + ////////////////////////////////////// + + for (auto object : _objects) { object.render(_shaderProgram);