diff options
Diffstat (limited to 'assets/shaders/blinn_phong.frag')
-rw-r--r-- | assets/shaders/blinn_phong.frag | 97 |
1 files changed, 0 insertions, 97 deletions
diff --git a/assets/shaders/blinn_phong.frag b/assets/shaders/blinn_phong.frag deleted file mode 100644 index 267c71b..0000000 --- a/assets/shaders/blinn_phong.frag +++ /dev/null @@ -1,97 +0,0 @@ -#version 430 core -out vec4 FragColor; - -// A Blinn-Phong material with textures for diffuse and specular -// lighting maps and a numeric shininess factor. -struct Material { - sampler2D diffuse; - sampler2D specular; - float shininess; -}; - -struct DirLight { - vec3 direction; - vec3 ambient; - vec3 diffuse; - vec3 specular; -}; - -struct PointLight { - vec3 position; - // fall off properties - float constant; - float linear; - float quadratic; - - vec3 ambient; - vec3 diffuse; - vec3 specular; -}; - -in VS_OUT { - vec3 FragPos; - vec3 Normal; - vec2 TexCoords; - // vec4 FragPosLightSpace; - vec4 Color; -} fs_in; - -// --- Uniforms -#define NUM_POINT_LIGHTS 4 -uniform vec3 viewPos; -uniform Material material; -uniform DirLight dirLight; -uniform PointLight pointLights[NUM_POINT_LIGHTS]; - -// --- Function prototypes -vec3 CalcDirLight(DirLight light, vec3 normal, vec3 viewDir); -vec3 CalcPointLight(PointLight light, vec3 normal, vec3 fragPos, vec3 viewDir); - -void main() { - vec3 norm = normalize(fs_in.Normal); - vec3 viewDir = normalize(viewPos - fs_in.FragPos); - - vec3 result = CalcDirLight(dirLight, norm, viewDir); - for (int i = 0; i < 4; i++) { - result += CalcPointLight(pointLights[i], norm, fs_in.FragPos, viewDir); - } - -// FragColor = vec4(result, 1.0); - FragColor = fs_in.Color + 0.5; -} - -vec3 CalcDirLight(DirLight light, vec3 normal, vec3 viewDir) -{ - vec3 lightDir = normalize(-light.direction); - // diffuse shading - float diff = max(dot(normal, lightDir), 0.0); - // specular shading - vec3 reflectDir = reflect(-lightDir, normal); - float spec = pow(max(dot(viewDir, reflectDir), 0.0), material.shininess); - // combine result - vec3 ambient = light.ambient * vec3(texture(material.diffuse, fs_in.TexCoords)); - vec3 diffuse = light.diffuse * diff * vec3(texture(material.diffuse, fs_in.TexCoords)); - vec3 specular = light.specular * spec * vec3(texture(material.specular, fs_in.TexCoords)); - return (ambient + diffuse + specular); -} - -vec3 CalcPointLight(PointLight light, vec3 normal, vec3 fragPos, vec3 viewDir) -{ - vec3 lightDir = normalize(light.position - fragPos); - // diffuse - float diff = max(dot(normal, lightDir), 0.0); - // specular - vec3 reflectDir = reflect(-lightDir, normal); - float spec = pow(max(dot(viewDir, reflectDir), 0.0), material.shininess); - // attentuation - float distance = length(light.position - fragPos); - float attentuation = 1.0 / (light.constant + light.linear * distance * light.quadratic * (distance * distance)); - // result - vec3 ambient = light.ambient * vec3(texture(material.diffuse, fs_in.TexCoords)); - vec3 diffuse = light.diffuse * diff * vec3(texture(material.diffuse, fs_in.TexCoords)); - vec3 specular = light.specular * spec * vec3(texture(material.specular, fs_in.TexCoords)); - ambient *= attentuation; - diffuse *= attentuation; - specular *= attentuation; - return (ambient + diffuse + specular); -} |