diff --git a/assets/shaders/block_f_shader.glsl b/assets/shaders/block_f_shader.glsl index eef3983..b3d28d8 100644 --- a/assets/shaders/block_f_shader.glsl +++ b/assets/shaders/block_f_shader.glsl @@ -25,6 +25,10 @@ uniform float minRadius; uniform float maxRadius; uniform bool enablePBR; uniform bool flipY; + +uniform int renderDistance; +uniform vec3 skyColor; + const vec2 poissonDisk32[32] = vec2[]( vec2(-0.975402, -0.071138), vec2(-0.920347, -0.411420), @@ -341,8 +345,17 @@ void main(void) { vec3 specular = spec * sunlightColor * specularStrength; float shadow = ShadowCalculation(FragPosLightSpace, norm, lightDir); - + + // fog + float dist = length(cameraPos - vert_pos); + vec4 fogColor = vec4(skyColor, 1.0); + float fogStart = renderDistance * 16 * 0.9; + float fogEnd = renderDistance * 16; + + float fogFactor = smoothstep(fogEnd, fogStart, dist); color = vec4((ambient + (1.0 - shadow) * (diffuse)) * objectColor.rgb + (1.0-shadow) * specular * objectColor.rgb, objectColor.a); + + color = mix(fogColor, color, fogFactor); //color = vec4(normal * 0.5 + 0.5, 1.0); //color = vec4(tangent * 0.5 + 0.5, 1.0);; //color = vec4(norm * 0.5 + 0.5, 1.0); diff --git a/src/renderer.cpp b/src/renderer.cpp index b10d611..133f2ad 100644 --- a/src/renderer.cpp +++ b/src/renderer.cpp @@ -728,6 +728,8 @@ void Renderer::render_world() { normal_block_shader.set_loc("specularStrength", m_specular_strength); normal_block_shader.set_loc("cameraPos", m_camera.get_camera_pos()); normal_block_shader.set_loc("flipY", m_flip_y); + normal_block_shader.set_loc("renderDistance", m_world.rendering_distance()); + normal_block_shader.set_loc("skyColor", m_sky_uniform.sky_top); m_mvp_mat = m_p_mat * m_mv_mat; auto& m_planes = m_world.planes();