1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- #ifdef GL_ES
- precision highp float;
- #endif
- uniform bool alphaTest;
- varying vec4 vColor;
- // Samplers
- varying vec2 vUV;
- uniform sampler2D diffuseSampler;
- // Fog
- #ifdef FOG
- #define FOGMODE_NONE 0.
- #define FOGMODE_EXP 1.
- #define FOGMODE_EXP2 2.
- #define FOGMODE_LINEAR 3.
- #define E 2.71828
- uniform vec4 vFogInfos;
- uniform vec3 vFogColor;
- varying float fFogDistance;
- float CalcFogFactor()
- {
- float fogCoeff = 1.0;
- float fogStart = vFogInfos.y;
- float fogEnd = vFogInfos.z;
- float fogDensity = vFogInfos.w;
- if (FOGMODE_LINEAR == vFogInfos.x)
- {
- fogCoeff = (fogEnd - fFogDistance) / (fogEnd - fogStart);
- }
- else if (FOGMODE_EXP == vFogInfos.x)
- {
- fogCoeff = 1.0 / pow(E, fFogDistance * fogDensity);
- }
- else if (FOGMODE_EXP2 == vFogInfos.x)
- {
- fogCoeff = 1.0 / pow(E, fFogDistance * fFogDistance * fogDensity * fogDensity);
- }
- return min(1., max(0., fogCoeff));
- }
- #endif
- void main(void) {
- vec4 baseColor = texture2D(diffuseSampler, vUV);
- if (alphaTest)
- {
- if (baseColor.a < 0.95)
- discard;
- }
- baseColor *= vColor;
- #ifdef FOG
- float fog = CalcFogFactor();
- baseColor.rgb = fog * baseColor.rgb + (1.0 - fog) * vFogColor;
- #endif
- gl_FragColor = baseColor;
- }
|