computer-grafik-1/u08-normalmap/fragmentShader.glsl

56 lines
1.1 KiB
GLSL

#version 330 core
in vec3 normal;
in vec3 fragmentPosition;
in vec2 textureCoordinate;
flat in mat3 TBN;
uniform vec4 ambientColor;
uniform vec4 diffusionColor;
uniform vec4 specularColor;
uniform float shininess;
uniform vec4 ambientLight;
uniform vec3 lightPosition;
uniform vec4 lightColor;
uniform sampler2D myTexture;
uniform sampler2D myNormal;
float emissionStrength = 0.0;
void main() {
vec4 color = texture(myTexture, textureCoordinate);
vec3 norm = normalize((texture(myNormal, textureCoordinate).xyz * 2 - vec3(1,1,1)));
// norm = normalize(normal);
vec3 lightDir = TBN * normalize(lightPosition - fragmentPosition);
vec3 eyeDir = TBN * (-normalize(fragmentPosition));
float diff = max(dot(norm, lightDir), 0.0);
vec3 halfway = (lightDir + eyeDir) / length(lightDir + eyeDir);
float specular = pow(max(dot(halfway, norm), 0.0), shininess);
gl_FragColor =
// EMISSION
color * emissionStrength +
// // AMBIENT
ambientLight * color +
// DIFFUSION
diff * lightColor * color +
// SPECULAR
specular * lightColor * color;
// gl_FragColor = vec4(norm, 1);
}