50 lines
1.5 KiB
GLSL
50 lines
1.5 KiB
GLSL
// Include 'version.header'.
|
|
// Include 'texturing-frag.snippet'.
|
|
// Include 'lighting-frag.snippet'
|
|
|
|
|
|
|
|
in vec3 frag_Site;
|
|
in vec3 frag_Normal;
|
|
in vec2 frag_Coords;
|
|
|
|
uniform mat4 model_Transform;
|
|
uniform mat3 inverse_model_Rotation;
|
|
uniform vec3 camera_Site;
|
|
|
|
out vec4 final_Color;
|
|
|
|
|
|
|
|
void
|
|
main()
|
|
{
|
|
vec3 surface_Site = vec3 ( model_Transform
|
|
* vec4 (frag_Site, 1));
|
|
vec4 surface_Color = apply_Texturing (frag_Coords);
|
|
vec3 Surface_to_Camera = normalize (camera_Site - surface_Site);
|
|
vec3 Normal = normalize ( frag_Normal
|
|
* inverse_model_Rotation);
|
|
|
|
// Combine color from all the lights.
|
|
//
|
|
vec3 linear_Color = vec3 (0);
|
|
|
|
for (int i = 0; i < light_Count; ++i)
|
|
{
|
|
linear_Color += apply_Light (Lights [i],
|
|
surface_Color.rgb,
|
|
Normal,
|
|
surface_Site,
|
|
Surface_to_Camera);
|
|
}
|
|
|
|
vec3 Gamma = vec3 (1.0 / 2.2);
|
|
|
|
final_Color = vec4 (pow (linear_Color, // Final color (after gamma correction).
|
|
Gamma),
|
|
surface_Color.a);
|
|
|
|
final_Color = min (final_Color, // Prevent light saturation.
|
|
surface_Color);
|
|
} |