From d726a2606bfc61ae27832cb5b4b959d33f317e79 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20=C5=A0toura=C4=8D?= <525032@mail.muni.cz> Date: Mon, 24 Apr 2023 15:45:15 +0200 Subject: [PATCH] added specular lighting --- data/shaders/lightshader.frag | 12 +++++++++++- src/gfx/include/gfx/control.hpp | 2 +- src/gfx/src/render.cpp | 5 +++-- 3 files changed, 15 insertions(+), 4 deletions(-) diff --git a/data/shaders/lightshader.frag b/data/shaders/lightshader.frag index 9ae137b..95cda80 100644 --- a/data/shaders/lightshader.frag +++ b/data/shaders/lightshader.frag @@ -7,17 +7,27 @@ in vec3 Normal; uniform vec3 objectColor; uniform vec3 lightColor; uniform vec3 lightPos; +uniform vec3 viewPos; void main() { + //ambient float ambientStrength = 0.1; vec3 ambient = ambientStrength * lightColor; + // diffuse vec3 norm = normalize(Normal); vec3 lightDir = normalize(lightPos - FragPos); float diff = max(dot(norm, lightDir), 0.0); vec3 diffuse = diff * lightColor; - FragColor = vec4((ambient + diffuse) * objectColor, 1.0f); + // specular + float specularStrength = 0.5; // TO DO: Object shine + vec3 viewDir = normalize(viewPos - FragPos); + vec3 reflectDir = reflect(-lightDir, norm); + float spec = pow(max(dot(viewDir, reflectDir), 0.0), 32); + vec3 specular = specularStrength * spec * lightColor; + + FragColor = vec4((ambient + diffuse + specular) * objectColor, 1.0f); } diff --git a/src/gfx/include/gfx/control.hpp b/src/gfx/include/gfx/control.hpp index 8b4278b..eb0695b 100644 --- a/src/gfx/include/gfx/control.hpp +++ b/src/gfx/include/gfx/control.hpp @@ -18,8 +18,8 @@ protected: float step = 0; // FTO DO: shared ptr - //Frame &bound_frame; Frame* bound_frame; + //std::shared_ptr<Frame> bound_frame; public: Controller(Frame* frame) diff --git a/src/gfx/src/render.cpp b/src/gfx/src/render.cpp index cb4eae2..742fc5f 100644 --- a/src/gfx/src/render.cpp +++ b/src/gfx/src/render.cpp @@ -69,7 +69,7 @@ void send_matrices_to_shader(Shader &myShader, glm::mat4 &model, glm::mat4 &view ASSUMPTION(glGetError() == GL_NO_ERROR); } -void draw_objects(std::map<std::string, shader_ptr> &myShaders, +void draw_objects(std::map<std::string, shader_ptr> &myShaders, Frame &cam_frame, std::vector<object_ptr> &objects,std::vector<frame_ptr> &obj_frames, glm::mat4 &view, glm::mat4 &projection) { @@ -84,6 +84,7 @@ void draw_objects(std::map<std::string, shader_ptr> &myShaders, // Hardcoded light index myShaders[shader_used]->setVec3("lightColor", objects[1]->getColor()); myShaders[shader_used]->setVec3("lightPos", obj_frames[1]->getPosition()); + myShaders[shader_used]->setVec3("viewPos", cam_frame.getPosition()); } glm::mat4 model = obj_frames[i]->getModelMat(); @@ -158,7 +159,7 @@ void gfx_draw(std::map<std::string, shader_ptr> &myShaders, ASSUMPTION(glGetError() == GL_NO_ERROR); // DRAW OBJECTS - draw_objects(myShaders, objects, obj_frames, view, projection); + draw_objects(myShaders, cam_frame, objects, obj_frames, view, projection); // DRAW GRID draw_grid(myShaders, grid, grid_frame, view, projection); -- GitLab