sprites.fragment.fx 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. #ifdef GL_ES
  2. precision highp float;
  3. #endif
  4. uniform bool alphaTest;
  5. varying vec4 vColor;
  6. // Samplers
  7. varying vec2 vUV;
  8. uniform sampler2D diffuseSampler;
  9. // Fog
  10. #ifdef FOG
  11. #define FOGMODE_NONE 0.
  12. #define FOGMODE_EXP 1.
  13. #define FOGMODE_EXP2 2.
  14. #define FOGMODE_LINEAR 3.
  15. #define E 2.71828
  16. uniform vec4 vFogInfos;
  17. uniform vec3 vFogColor;
  18. varying float fFogDistance;
  19. float CalcFogFactor()
  20. {
  21. float fogCoeff = 1.0;
  22. float fogStart = vFogInfos.y;
  23. float fogEnd = vFogInfos.z;
  24. float fogDensity = vFogInfos.w;
  25. if (FOGMODE_LINEAR == vFogInfos.x)
  26. {
  27. fogCoeff = (fogEnd - fFogDistance) / (fogEnd - fogStart);
  28. }
  29. else if (FOGMODE_EXP == vFogInfos.x)
  30. {
  31. fogCoeff = 1.0 / pow(E, fFogDistance * fogDensity);
  32. }
  33. else if (FOGMODE_EXP2 == vFogInfos.x)
  34. {
  35. fogCoeff = 1.0 / pow(E, fFogDistance * fFogDistance * fogDensity * fogDensity);
  36. }
  37. return min(1., max(0., fogCoeff));
  38. }
  39. #endif
  40. void main(void) {
  41. vec4 baseColor = texture2D(diffuseSampler, vUV);
  42. if (alphaTest)
  43. {
  44. if (baseColor.a < 0.95)
  45. discard;
  46. }
  47. baseColor *= vColor;
  48. #ifdef FOG
  49. float fog = CalcFogFactor();
  50. baseColor.rgb = fog * baseColor.rgb + (1.0 - fog) * vFogColor;
  51. #endif
  52. gl_FragColor = baseColor;
  53. }