diff --git a/shaders/lighting/Frag.glsl b/shaders/lighting/Frag.glsl index a3d7ace..f0ed3ef 100644 --- a/shaders/lighting/Frag.glsl +++ b/shaders/lighting/Frag.glsl @@ -6,35 +6,43 @@ struct Material { float shininess; }; + +struct Light { + vec3 position; + vec3 ambient; + vec3 diffuse; + vec3 specular; +}; + + out vec4 FragColor; in vec3 FragPos; in vec3 Normal; uniform vec3 ourColor; -uniform vec3 lightColor; -uniform vec3 lightPos; uniform vec3 viewPos; uniform Material material; +uniform Light light; void main() { //misc vec3 norm = normalize(Normal); - vec3 lightDir = normalize(lightPos - FragPos); + vec3 lightDir = normalize(light.position - FragPos); // ambient - vec3 ambient = vec3(0.2) * (lightColor * material.ambient); + vec3 ambient = light.ambient * material.ambient; // diffuse float diff = max(dot(norm, lightDir), 0.0); - vec3 diffuse = lightColor * (diff * material.diffuse); + vec3 diffuse = light.diffuse * (diff * material.diffuse); // specular vec3 viewDir = normalize(viewPos - FragPos); vec3 reflectDir = reflect(-lightDir, norm); float spec = pow(max(dot(viewDir, reflectDir), 0.0), material.shininess); - vec3 specular = vec3(0.5) * (lightColor * (spec * material.specular)); + vec3 specular = light.specular * (spec * material.specular); //out vec3 result = ambient + diffuse + specular; diff --git a/src/main.cpp b/src/main.cpp index 454c0a4..3922b7e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -83,12 +83,15 @@ int main(void) { s->setVec3("lightPos", lightPos); s->setVec3("viewPos", glm::vec3(0.0, 0.0, 5.0)); - /*mat taken from*/ - /*http://devernay.free.fr/cours/opengl/materials.html*/ - s->setVec3("material.ambient", glm::vec3(0.24725, 0.1995, 0.0745)); - s->setVec3("material.diffuse", glm::vec3(0.75164, 0.60648, 0.22648)); - s->setVec3("material.specular", glm::vec3(0.628281, 0.555802, 0.366065)); - s->setFloat("material.shininess", 0.4 * 128); + s->setVec3("light.ambient", glm::vec3(0.2)); + s->setVec3("light.diffuse", glm::vec3(0.5)); + s->setVec3("light.specular", glm::vec3(1)); + s->setVec3("light.position", lightPos); + + s->setVec3("material.ambient", glm::vec3(1.0, 0.5, 0.31)); + s->setVec3("material.diffuse", glm::vec3(1.0, 0.5, 0.31)); + s->setVec3("material.specular", glm::vec3(0.5)); + s->setFloat("material.shininess", 32); cube->draw(cam); s = light->getShader();