You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
41 lines
836 B
41 lines
836 B
struct Fog
|
|
{
|
|
int fogMode;
|
|
float density;
|
|
float start;
|
|
float max;
|
|
vec4 color;
|
|
};
|
|
|
|
uniform Fog fog;
|
|
|
|
const int FOG_NONE = 0;
|
|
const int FOG_LINEAR = 1;
|
|
const int FOG_EXPONENTIAL = 2;
|
|
const int FOG_EXPONENTIAL_SQRD = 3;
|
|
|
|
vec4 applyFog(vec4 color)
|
|
{
|
|
vec4 finalColor = color;
|
|
if(fog.fogMode != FOG_NONE)
|
|
{
|
|
float fogFactor;
|
|
float distFromEye = abs(length(vertex - eyePos));
|
|
if(fog.fogMode == FOG_LINEAR)
|
|
{
|
|
fogFactor = (fog.max - distFromEye) / (fog.max - fog.start);
|
|
}
|
|
else if(fog.fogMode == FOG_EXPONENTIAL)
|
|
{
|
|
fogFactor = exp(fog.density * -distFromEye);
|
|
}
|
|
else if(fog.fogMode == FOG_EXPONENTIAL_SQRD)
|
|
{
|
|
fogFactor = exp(-pow(fog.density * distFromEye, 2));
|
|
}
|
|
fogFactor = clamp(fogFactor, 0.0, 1.0);
|
|
finalColor = mix(fog.color, color, fogFactor);
|
|
}
|
|
return finalColor;
|
|
}
|
|
|
|
|