Files
OpenGL_Intro/shaders/simple.frag

31 lines
1.1 KiB
GLSL

#version 460 core
layout(location = 0) out vec4 color;
in vec4 vColor;
in vec3 vNormal;
void main() {
vec3 lightDirection = normalize(vec3(0.8, -0.5, 0.6));
// ambient component
float ambientStrength = 0.1;
vec3 ambient = ambientStrength * vColor.rgb;
// bump mapping perturbation
float bumpStrength = 0.2;
float nVal = fract(sin(dot(vNormal.xy, vec2(12.9898, 78.233))) * 43758.5453);
vec3 bumpNormal = normalize(vNormal + bumpStrength * (nVal - 0.5));
// diffuse component (Lambert) with bump
float lambert = max(0.0, dot(normalize(bumpNormal), -lightDirection));
vec3 diffuse = vColor.rgb * lambert;
// combine ambient and diffuse
vec3 result = ambient + diffuse;
// specular component (Phong)
float shininess = 32.0;
vec3 viewDir = vec3(0.0, 0.0, 1.0);
vec3 reflectDir = reflect(-lightDirection, bumpNormal);
float spec = pow(max(dot(reflectDir, viewDir), 0.0), shininess);
float specStrength = 0.5;
vec3 specular = specStrength * spec * vec3(1.0);
result += specular;
color = vec4(result, vColor.a);
}