1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
// GLSL fragment shader
varying vec3 eyeSpacePos;
varying vec3 worldSpaceNormal;
varying vec3 eyeSpaceNormal;
uniform vec4 deepColor;
uniform vec4 shallowColor;
uniform vec4 skyColor;
uniform vec3 lightDir;
void main()
{
vec3 eyeVector = normalize(eyeSpacePos);
vec3 eyeSpaceNormalVector = normalize(eyeSpaceNormal);
vec3 worldSpaceNormalVector = normalize(worldSpaceNormal);
float facing = max(0.0, dot(eyeSpaceNormalVector, -eyeVector));
float fresnel = pow(1.0 - facing, 5.0); // Fresnel approximation
float diffuse = max(0.0, dot(worldSpaceNormalVector, lightDir));
vec4 waterColor = deepColor;
gl_FragColor = waterColor*diffuse + skyColor*fresnel;
}
|