waterFogF.glsl
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:1k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /**
  2.  * @file waterFogF.glsl
  3.  *
  4.  * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc.
  5.  * $License$
  6.  */
  7. uniform vec4 lightnorm;
  8. uniform vec4 waterPlane;
  9. uniform vec4 waterFogColor;
  10. uniform float waterFogDensity;
  11. uniform float waterFogKS;
  12. vec3 getPositionEye();
  13. vec4 applyWaterFog(vec4 color)
  14. {
  15. //normalize view vector
  16. vec3 view = normalize(getPositionEye());
  17. float es = -(dot(view, waterPlane.xyz));
  18. //find intersection point with water plane and eye vector
  19. //get eye depth
  20. float e0 = max(-waterPlane.w, 0.0);
  21. vec3 int_v = waterPlane.w > 0.0 ? view * waterPlane.w/es : vec3(0.0, 0.0, 0.0);
  22. //get object depth
  23. float depth = length(getPositionEye() - int_v);
  24. //get "thickness" of water
  25. float l = max(depth, 0.1);
  26. float kd = waterFogDensity;
  27. float ks = waterFogKS;
  28. vec4 kc = waterFogColor;
  29. float F = 0.98;
  30. float t1 = -kd * pow(F, ks * e0);
  31. float t2 = kd + ks * es;
  32. float t3 = pow(F, t2*l) - 1.0;
  33. float L = min(t1/t2*t3, 1.0);
  34. float D = pow(0.98, l*kd);
  35. color.rgb = color.rgb * D + kc.rgb * L;
  36. color.a = kc.a + color.a;
  37. return color;
  38. }