From 0e35a764d995a46f010ee6e8879c0e774d3bfd29 Mon Sep 17 00:00:00 2001 From: hazkerindii228 <59193313+PavelGem-13g@users.noreply.github.com> Date: Mon, 17 Mar 2025 11:09:14 +0300 Subject: [PATCH] add materials --- labs2/lab3/lab3.cpp | 15 ++++++++++++--- labs2/lab3/shader.frag | 43 ++++++++++++++++++++++++++++++++---------- 2 files changed, 45 insertions(+), 13 deletions(-) diff --git a/labs2/lab3/lab3.cpp b/labs2/lab3/lab3.cpp index ce0af3d..c9e2dae 100755 --- a/labs2/lab3/lab3.cpp +++ b/labs2/lab3/lab3.cpp @@ -365,11 +365,20 @@ int main() ourShader.Use(); - glUniform3f(glGetUniformLocation(ourShader.Program, "objectColor"), 1.0f, 1.0f, 1.0f); - glUniform3f(glGetUniformLocation(ourShader.Program, "lightColor"), lightColor.x, lightColor.y, lightColor.z); - glUniform3f(glGetUniformLocation(ourShader.Program, "lightPos"), lightPos.x, lightPos.y, lightPos.z); + //glUniform3f(glGetUniformLocation(ourShader.Program, "objectColor"), 1.0f, 1.0f, 1.0f); + glUniform3f(glGetUniformLocation(ourShader.Program, "light.position"), lightPos.x, lightPos.y, lightPos.z); glUniform3f(glGetUniformLocation(ourShader.Program, "viewPos"), cameraPos.x, cameraPos.y, cameraPos.z); + glUniform3f(glGetUniformLocation(ourShader.Program, "light.ambient"), lightColor.x, lightColor.y, lightColor.z); + glUniform3f(glGetUniformLocation(ourShader.Program, "light.diffuse"), lightColor.x, lightColor.y, lightColor.z); + glUniform3f(glGetUniformLocation(ourShader.Program, "light.specular"), lightColor.x, lightColor.y, lightColor.z); + + glUniform3f(glGetUniformLocation(ourShader.Program, "material.ambient"), 1.0f, 0.0f, 0.0f); + glUniform3f(glGetUniformLocation(ourShader.Program, "material.diffuse"), 0.0f, 1.0f, 0.0f); + glUniform3f(glGetUniformLocation(ourShader.Program, "material.specular"), 0.0f, 0.0f, 1.0f); + glUniform1f(glGetUniformLocation(ourShader.Program, "material.shininess"), 256.0f); + + GLfloat timeValue = glfwGetTime(); GLuint timeLoc = glGetUniformLocation(ourShader.Program, "time"); glUniform1f(timeLoc, timeValue); diff --git a/labs2/lab3/shader.frag b/labs2/lab3/shader.frag index 67b259b..860247f 100755 --- a/labs2/lab3/shader.frag +++ b/labs2/lab3/shader.frag @@ -1,5 +1,20 @@ #version 330 core +struct Material { + vec3 ambient; + vec3 diffuse; + vec3 specular; + float shininess; +}; + +struct Light { + vec3 position; + + vec3 ambient; + vec3 diffuse; + vec3 specular; +}; + in vec2 TexCoord; in vec3 Normal; in vec3 FragPos; @@ -8,31 +23,39 @@ out vec4 color; uniform sampler2D ourTexture; -uniform vec3 objectColor; -uniform vec3 lightColor; -uniform vec3 lightPos; uniform vec3 viewPos; +uniform Material material; +uniform Light light; + +//uniform vec3 lightColor; +//uniform vec3 lightPos; +//uniform vec3 viewPos; void main() { vec3 texColor = texture(ourTexture, TexCoord).rgb; // Ambient - float ambientStrength = 0.1f; - vec3 ambient = ambientStrength * lightColor; + //float ambientStrength = 0.1f; + //vec3 ambient = ambientStrength * lightColor; + //vec3 ambient = lightColor * material.ambient; + vec3 ambient = light.ambient * material.ambient; // Diffuse vec3 norm = normalize(Normal); - vec3 lightDir = normalize(lightPos - FragPos); + vec3 lightDir = normalize(light.position - FragPos); float diff = max(dot(norm, lightDir), 0.0f); - vec3 diffuse = diff * lightColor; + //vec3 diffuse = lightColor * (diff * material.diffuse); + vec3 diffuse = light.diffuse * (diff * material.diffuse); // Specular - float specularStrength = 0.5f; + //float specularStrength = 0.5f; 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; + float spec = pow(max(dot(viewDir, reflectDir), 0.0), material.shininess); + //vec3 specular = specularStrength * spec * lightColor; + //vec3 specular = lightColor * (spec * material.specular); + vec3 specular = light.specular * (spec * material.specular); vec3 result = (ambient + diffuse + specular) * texColor; color = vec4(result, 1.0f); -- GitLab