#include "sphere.hxx"
#include "oursun.hxx"
-
// Set up sun rendering call backs
static int sgSunOrbPreDraw( ssgEntity *e ) {
/* cout << endl << "Sun orb pre draw" << endl << "----------------"
// cout << "push error = " << glGetError() << endl;
glDisable( GL_DEPTH_TEST );
-// glDisable( GL_FOG );
+ // glDisable( GL_FOG );
+ glFogf (GL_FOG_DENSITY, sun_exp2_punch_through);
glBlendFunc ( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA ) ;
return true;
// Constructor
SGSun::SGSun( void ) {
+ prev_sun_angle = -9999.0;
+ visibility = -9999.0;
}
sgSunOrbPreDraw, sgSunOrbPostDraw );
// force a repaint of the sun colors with arbitrary defaults
- repaint( 0.0 );
+ repaint( 0.0, 1.0 );
// build the halo
// sun_texbuf = new GLubyte[64*64*3];
// 0 degrees = high noon
// 90 degrees = sun rise/set
// 180 degrees = darkest midnight
-bool SGSun::repaint( double sun_angle ) {
- static float prev_sun_angle = 9999.0;
+bool SGSun::repaint( double sun_angle, double new_visibility ) {
+ if ( visibility != new_visibility ) {
+ visibility = new_visibility;
- if (prev_sun_angle != sun_angle)
- {
+ static double sqrt_m_log01 = sqrt( -log( 0.01 ) );
+ sun_exp2_punch_through = sqrt_m_log01 / (visibility * 15);
+ }
+ if (prev_sun_angle != sun_angle) {
prev_sun_angle = sun_angle;
float sun_factor = 4*cos(sun_angle);