fogFragmentDeclaration.fx 804 B

123456789101112131415161718192021222324252627282930313233343536
  1. #ifdef FOG
  2. #define FOGMODE_NONE 0.
  3. #define FOGMODE_EXP 1.
  4. #define FOGMODE_EXP2 2.
  5. #define FOGMODE_LINEAR 3.
  6. #define E 2.71828
  7. uniform vec4 vFogInfos;
  8. uniform vec3 vFogColor;
  9. varying vec3 vFogDistance;
  10. float CalcFogFactor()
  11. {
  12. float fogCoeff = 1.0;
  13. float fogStart = vFogInfos.y;
  14. float fogEnd = vFogInfos.z;
  15. float fogDensity = vFogInfos.w;
  16. float fogDistance = length(vFogDistance);
  17. if (FOGMODE_LINEAR == vFogInfos.x)
  18. {
  19. fogCoeff = (fogEnd - fogDistance) / (fogEnd - fogStart);
  20. }
  21. else if (FOGMODE_EXP == vFogInfos.x)
  22. {
  23. fogCoeff = 1.0 / pow(E, fogDistance * fogDensity);
  24. }
  25. else if (FOGMODE_EXP2 == vFogInfos.x)
  26. {
  27. fogCoeff = 1.0 / pow(E, fogDistance * fogDistance * fogDensity * fogDensity);
  28. }
  29. return clamp(fogCoeff, 0.0, 1.0);
  30. }
  31. #endif