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

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file edgeF.glsl
  3.  *
  4.  * Copyright (c) 2007-$CurrentYear$, Linden Research, Inc.
  5.  * $License$
  6.  */
  7. #extension GL_ARB_texture_rectangle : enable
  8. uniform sampler2DRect depthMap;
  9. uniform sampler2DRect normalMap;
  10. uniform float gi_dist_cutoff;
  11. varying vec2 vary_fragcoord;
  12. uniform float depth_cutoff;
  13. uniform float norm_cutoff;
  14. uniform mat4 inv_proj;
  15. uniform vec2 screen_res;
  16. float getDepth(vec2 pos_screen)
  17. {
  18. float z = texture2DRect(depthMap, pos_screen.xy).a;
  19. z = z*2.0-1.0;
  20. vec4 ndc = vec4(0.0, 0.0, z, 1.0);
  21. vec4 p = inv_proj*ndc;
  22. return p.z/p.w;
  23. }
  24. void main() 
  25. {
  26. vec3 norm = texture2DRect(normalMap, vary_fragcoord.xy).xyz*2.0-1.0;
  27. float depth = getDepth(vary_fragcoord.xy);
  28. vec2 tc = vary_fragcoord.xy;
  29. float sc = 0.75;
  30. vec2 de;
  31. de.x = (depth-getDepth(tc+vec2(sc, sc))) + (depth-getDepth(tc+vec2(-sc, -sc)));
  32. de.y = (depth-getDepth(tc+vec2(-sc, sc))) + (depth-getDepth(tc+vec2(sc, -sc)));
  33. de /= depth;
  34. de *= de;
  35. de = step(depth_cutoff, de);
  36. vec2 ne;
  37. ne.x = dot(texture2DRect(normalMap, tc+vec2(-sc,-sc)).rgb*2.0-1.0, norm);
  38. ne.y = dot(texture2DRect(normalMap, tc+vec2(sc,sc)).rgb*2.0-1.0, norm);
  39. ne = 1.0-ne;
  40. ne = step(norm_cutoff, ne);
  41. gl_FragColor.a = dot(de,de)+dot(ne,ne);
  42. //gl_FragColor.a = dot(de,de);
  43. }