12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576 |
- #version 330
- // Vertex shader input data
- in vec2 fragTexCoord;
- in vec3 fragNormal;
- // Diffuse data
- uniform sampler2D texture0;
- uniform vec4 fragTintColor;
- // Light attributes
- uniform vec3 light_ambientColor = vec3(0.6, 0.3, 0.0);
- uniform vec3 light_diffuseColor = vec3(1.0, 0.5, 0.0);
- uniform vec3 light_specularColor = vec3(0.0, 1.0, 0.0);
- uniform float light_intensity = 1.0;
- uniform float light_specIntensity = 1.0;
- // Material attributes
- uniform vec3 mat_ambientColor = vec3(1.0, 1.0, 1.0);
- uniform vec3 mat_specularColor = vec3(1.0, 1.0, 1.0);
- uniform float mat_glossiness = 50.0;
- // World attributes
- uniform vec3 lightPos;
- uniform vec3 cameraPos;
- // Fragment shader output data
- out vec4 fragColor;
- vec3 AmbientLighting()
- {
- return (mat_ambientColor*light_ambientColor);
- }
- vec3 DiffuseLighting(in vec3 N, in vec3 L)
- {
- // Lambertian reflection calculation
- float diffuse = clamp(dot(N, L), 0, 1);
-
- return (fragTintColor.xyz*light_diffuseColor*light_intensity*diffuse);
- }
- vec3 SpecularLighting(in vec3 N, in vec3 L, in vec3 V)
- {
- float specular = 0.0;
- // Calculate specular reflection only if the surface is oriented to the light source
- if (dot(N, L) > 0)
- {
- // Calculate half vector
- vec3 H = normalize(L + V);
-
- // Calculate specular intensity
- specular = pow(dot(N, H), 3 + mat_glossiness);
- }
-
- return (mat_specularColor*light_specularColor*light_specIntensity*specular);
- }
- void main()
- {
- // Normalize input vectors
- vec3 L = normalize(lightPos);
- vec3 V = normalize(cameraPos);
- vec3 N = normalize(fragNormal);
-
- vec3 ambient = AmbientLighting();
- vec3 diffuse = DiffuseLighting(N, L);
- vec3 specular = SpecularLighting(N, L, V);
-
- // Get base color from texture
- vec4 textureColor = texture(texture0, fragTexCoord);
- vec3 finalColor = textureColor.rgb;
-
- fragColor = vec4(finalColor * (ambient + diffuse + specular), textureColor.a);
- }
|