waterFogF.glsl
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:1k
- /**
- * @file waterFogF.glsl
- *
- * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc.
- * $License$
- */
- uniform vec4 lightnorm;
- uniform vec4 waterPlane;
- uniform vec4 waterFogColor;
- uniform float waterFogDensity;
- uniform float waterFogKS;
- vec3 getPositionEye();
- vec4 applyWaterFog(vec4 color)
- {
- //normalize view vector
- vec3 view = normalize(getPositionEye());
- float es = -(dot(view, waterPlane.xyz));
- //find intersection point with water plane and eye vector
-
- //get eye depth
- float e0 = max(-waterPlane.w, 0.0);
-
- vec3 int_v = waterPlane.w > 0.0 ? view * waterPlane.w/es : vec3(0.0, 0.0, 0.0);
-
- //get object depth
- float depth = length(getPositionEye() - int_v);
-
- //get "thickness" of water
- float l = max(depth, 0.1);
- float kd = waterFogDensity;
- float ks = waterFogKS;
- vec4 kc = waterFogColor;
-
- float F = 0.98;
-
- float t1 = -kd * pow(F, ks * e0);
- float t2 = kd + ks * es;
- float t3 = pow(F, t2*l) - 1.0;
-
- float L = min(t1/t2*t3, 1.0);
-
- float D = pow(0.98, l*kd);
-
- color.rgb = color.rgb * D + kc.rgb * L;
- color.a = kc.a + color.a;
-
- return color;
- }