parent
4d52269b68
commit
80a1f36bbd
@ -1,41 +1,41 @@ |
||||
struct Fog |
||||
{ |
||||
int fogMode; |
||||
int mode; |
||||
float density; |
||||
float start; |
||||
float max; |
||||
vec4 color; |
||||
float start_dist; |
||||
float max_dist; |
||||
vec3 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; |
||||
const int FM_NONE = 0; |
||||
const int FM_LINEAR = 1; |
||||
const int FM_EXPONENTIAL = 2; |
||||
const int FM_EXPONENTIAL_SQRD = 3; |
||||
|
||||
vec4 applyFog(vec4 color) |
||||
vec4 apply_fog(vec4 color) |
||||
{ |
||||
vec4 finalColor = color; |
||||
if(fog.fogMode != FOG_NONE) |
||||
vec4 final_color = color; |
||||
if(fog.mode != FM_NONE) |
||||
{ |
||||
float fogFactor; |
||||
float distFromEye = abs(length(vertex - eyePos)); |
||||
if(fog.fogMode == FOG_LINEAR) |
||||
float fog_factor; |
||||
float dist_from_eye = abs(length(vertex - camera_pos)); |
||||
if(fog.mode == FM_LINEAR) |
||||
{ |
||||
fogFactor = (fog.max - distFromEye) / (fog.max - fog.start); |
||||
fog_factor = (fog.max_dist - dist_from_eye) / (fog.max_dist - fog.start_dist); |
||||
} |
||||
else if(fog.fogMode == FOG_EXPONENTIAL) |
||||
else if(fog.mode == FM_EXPONENTIAL) |
||||
{ |
||||
fogFactor = exp(fog.density * -distFromEye); |
||||
fog_factor = exp(fog.density * -dist_from_eye); |
||||
} |
||||
else if(fog.fogMode == FOG_EXPONENTIAL_SQRD) |
||||
else if(fog.mode == FM_EXPONENTIAL_SQRD) |
||||
{ |
||||
fogFactor = exp(-pow(fog.density * distFromEye, 2)); |
||||
fog_factor = exp(-pow(fog.density * dist_from_eye, 2)); |
||||
} |
||||
fogFactor = clamp(fogFactor, 0.0, 1.0); |
||||
finalColor = mix(fog.color, color, fogFactor); |
||||
fog_factor = clamp(fog_factor, 0.0, 1.0); |
||||
final_color = mix(vec4(fog.color, 1.0), color, fog_factor); |
||||
} |
||||
return finalColor; |
||||
return final_color; |
||||
} |
||||
|
||||
|
@ -1,23 +1,10 @@ |
||||
//include common.glsl commonFrag.glsl version.glsl |
||||
//include fog.glsl common.glsl commonFrag.glsl version.glsl |
||||
|
||||
uniform sampler2D diffuse_texture; |
||||
|
||||
out vec4 gbuffer[4]; |
||||
out vec4 frag_color; |
||||
|
||||
void main() |
||||
{ |
||||
// gl_FragData[0] = diffuse_color * texture(diffuse_texture, uv); |
||||
// gl_FragData[1] = vec4(vertex.xyz, 1.0); |
||||
// gl_FragData[2] = vec4(normal.xyz, 1.0); |
||||
// gl_FragData[3] = vec4(uv, 0.0, 1.0); |
||||
|
||||
gbuffer[0] = diffuse_color * texture(diffuse_texture, uv); |
||||
gbuffer[1] = vec4(vertex.xyz, 1.0); |
||||
gbuffer[2] = vec4(normalize(normal.xyz), 1.0); |
||||
gbuffer[3] = vec4(uv, 0.0, 1.0); |
||||
|
||||
// gbuffer[0] = (diffuse_color * texture(diffuse_texture, uv)).xyz; |
||||
// gbuffer[1] = vertex.xyz; |
||||
// gbuffer[2] = normal.xyz; |
||||
// gbuffer[3] = vec3(uv, 0.0); |
||||
frag_color = apply_fog(diffuse_color * texture(diffuse_texture, uv)); |
||||
} |
||||
|
Loading…
Reference in new issue