A 3d fps game made in OpenGL
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.
 
 
 
 
Symmetry/assets/shaders/fog.glsl

41 lines
913 B

struct Fog
{
int mode;
float density;
float start_dist;
float max_dist;
vec3 color;
};
uniform Fog fog;
const int FM_NONE = 0;
const int FM_LINEAR = 1;
const int FM_EXPONENTIAL = 2;
const int FM_EXPONENTIAL_SQRD = 3;
vec4 apply_fog(vec4 color)
{
vec4 final_color = color;
if(fog.mode != FM_NONE)
{
float fog_factor;
float dist_from_eye = abs(length(vertex - camera_pos));
if(fog.mode == FM_LINEAR)
{
fog_factor = (fog.max_dist - dist_from_eye) / (fog.max_dist - fog.start_dist);
}
else if(fog.mode == FM_EXPONENTIAL)
{
fog_factor = exp(fog.density * -dist_from_eye);
}
else if(fog.mode == FM_EXPONENTIAL_SQRD)
{
fog_factor = exp(-pow(fog.density * dist_from_eye, 2));
}
fog_factor = clamp(fog_factor, 0.0, 1.0);
final_color = mix(vec4(fog.color, 1.0), color, fog_factor);
}
return final_color;
}