19 lines
618 B
GLSL
19 lines
618 B
GLSL
#if !defined END_CENTER_FOG
|
|
#define END_CENTER_FOG
|
|
float doEndCenterFog(vec3 ro, vec3 rayDir, float wsdist, float falloff) { // Thanks to FoZy STYLE
|
|
vec3 d = ro - vec3(0.5, 60.5, 0.5); // Light source vector
|
|
d.y *= 0.7;
|
|
rayDir.y *= 0.7;
|
|
|
|
float a = falloff * dot(rayDir, rayDir);
|
|
float b = 2.0 * falloff * dot(rayDir, d);
|
|
float c = 1.0 + falloff * dot(d, d);
|
|
|
|
float sqrtDiscr = max(0.001, sqrt(4.0 * a * c - b * b));
|
|
float upper = (2.0 * a * wsdist + b) / sqrtDiscr;
|
|
float lower = b / sqrtDiscr;
|
|
|
|
return 2.0 * (atan(upper) - atan(lower)) / sqrtDiscr;
|
|
}
|
|
#endif
|