grid-stroke.effect 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. CCEffect %{
  2. editor:
  3. hide: true
  4. techniques:
  5. - passes:
  6. - vert: grid-vs:vert
  7. frag: grid-fs:frag
  8. priority: max - 11
  9. rasterizerState:
  10. cullMode: none
  11. depthStencilState:
  12. depthTest: true
  13. depthWrite: false
  14. blendState:
  15. targets:
  16. - blend: true
  17. blendSrc: src_alpha
  18. blendDst: one_minus_src_alpha
  19. blendDstAlpha: one_minus_src_alpha
  20. }%
  21. /**
  22. * a_texCoord.x:
  23. * 1 1
  24. * +-------------------------------------+
  25. * | |
  26. * +-------------------------------------+
  27. * 0 0
  28. *
  29. * a_texCoord.y = 0 for lines along Z axis
  30. * a_texCoord.y = 1 for lines along X axis
  31. */
  32. CCProgram grid-vs %{
  33. precision mediump float;
  34. #include <builtin/uniforms/cc-global>
  35. in vec2 a_texCoord;
  36. in vec3 a_position;
  37. out vec2 uv;
  38. out vec3 pos_w;
  39. vec4 vert () {
  40. uv = a_texCoord;
  41. pos_w = a_position;
  42. vec2 forward = vec2(cc_matView[0][2], cc_matView[2][2]);
  43. // widen the line wrt. camera-plane distance
  44. float dist = abs(cc_cameraPos.y);
  45. vec2 scale = vec2(1.0 - a_texCoord.y, a_texCoord.y);
  46. pos_w.xz += scale * vec2((a_texCoord.x * 2.0 - 1.0) * dist * 0.002);
  47. vec4 pos = cc_matViewProj * vec4(pos_w, 1.0);
  48. pos.z += 0.00011; // nudge on depth to avoid z-fighting at origin
  49. return pos;
  50. }
  51. }%
  52. CCProgram grid-fs %{
  53. precision mediump float;
  54. #include <builtin/uniforms/cc-global>
  55. #include <legacy/output>
  56. in vec2 uv;
  57. in vec3 pos_w;
  58. vec4 frag () {
  59. // alpha wrt. UVs
  60. float alpha = sqrt(0.5 - abs(uv.x - 0.5));
  61. // fade out at grazing angles
  62. float scale = abs(normalize(cc_cameraPos.xyz - pos_w).y);
  63. if (scale < 0.5) alpha *= max(0.3, scale / 0.5);
  64. return CCFragOutput(vec4(0.5, 0.5, 0.5, alpha));
  65. }
  66. }%