float rf1 = fabs(fmod(hor_rotation, SGD_2PI) - SGD_PI) / SGD_PI;
float rf2 = avf * pow(rf1*rf1, 1/sif) * 1.0639 * _saturation * _scattering;
+
+ // HACK: clamp rf2 to 1.0.
+ // Somehow, rf2 is huge at certain sun angles (around midnight), which results in
+ // rf3 being negative and hence negative fog colors and weird display issues...
+ // Something more fundamental may be wrong with the formulas here...
+ if (rf2>1.0) rf2 = 1.0;
+
float rf3 = 1.0 - rf2;
gamma = system_gamma * (0.9 - sif*avf);
- _adj_fog_color = rf3 * _fog_color + rf2 * _sun_color;;
+ _adj_fog_color = rf3 * _fog_color + rf2 * _sun_color;
gamma_correct_rgb( _adj_fog_color.data(), gamma);
// make sure the colors have their original value before they are being
SGVec3d nup = normalize(world_up);
_sun_angle = acos( dot( nup, nsun ) );
- double signnedPI = (_sun_angle < 0.0) ? -SGD_PI : SGD_PI;
- _sun_angle = fmod(_sun_angle+signnedPI, SGD_2PI) - signnedPI;
+ double signedPI = (_sun_angle < 0.0) ? -SGD_PI : SGD_PI;
+ _sun_angle = fmod(_sun_angle+signedPI, SGD_2PI) - signedPI;
SG_LOG( SG_EVENT, SG_DEBUG, "sun angle relative to current location = "
<< get_sun_angle() );