From 044ac5d5d334ca43312b608fe91023cda774bcbf Mon Sep 17 00:00:00 2001 From: curt Date: Fri, 30 Jun 2000 22:16:41 +0000 Subject: [PATCH] Just a few more visibility tweaks and clean ups. --- simgear/sky/dome.cxx | 34 +++++++++++++++++++++++++++------- simgear/sky/dome.hxx | 3 ++- simgear/sky/sky.cxx | 6 ++++-- simgear/sky/sky.hxx | 8 ++++---- 4 files changed, 37 insertions(+), 14 deletions(-) diff --git a/simgear/sky/dome.cxx b/simgear/sky/dome.cxx index 3bff53cb..8d542238 100644 --- a/simgear/sky/dome.cxx +++ b/simgear/sky/dome.cxx @@ -218,7 +218,7 @@ ssgBranch * SGSkyDome::build( ) { // force a repaint of the sky colors with ugly defaults sgVec3 fog_color; sgSetVec3( fog_color, 1.0, 1.0, 1.0 ); - repaint( color, fog_color, 0.0 ); + repaint( color, fog_color, 0.0, 5000.0 ); // build the ssg scene graph sub tree for the sky and connected // into the provide scene graph branch @@ -271,7 +271,8 @@ ssgBranch * SGSkyDome::build( ) { // 0 degrees = high noon // 90 degrees = sun rise/set // 180 degrees = darkest midnight -bool SGSkyDome::repaint( sgVec4 sky_color, sgVec4 fog_color, double sun_angle ) +bool SGSkyDome::repaint( sgVec4 sky_color, sgVec4 fog_color, double sun_angle, + double vis ) { double diff; sgVec3 outer_param, outer_amt, outer_diff; @@ -312,11 +313,28 @@ bool SGSkyDome::repaint( sgVec4 sky_color, sgVec4 fog_color, double sun_angle ) // First, recalulate the basic colors // + sgVec4 center_color; sgVec4 upper_color[12]; sgVec4 middle_color[12]; sgVec4 lower_color[12]; sgVec4 bottom_color[12]; + double vis_factor; + + if ( vis < 3000.0 ) { + vis_factor = (vis - 1000.0) / 2000.0; + if ( vis_factor < 0.0 ) { + vis_factor = 0.0; + } + } else { + vis_factor = 1.0; + } + + for ( j = 0; j < 3; j++ ) { + diff = sky_color[j] - fog_color[j]; + center_color[j] = sky_color[j] - diff * ( 1.0 - vis_factor ); + } + for ( i = 0; i < 6; i++ ) { for ( j = 0; j < 3; j++ ) { diff = sky_color[j] - fog_color[j]; @@ -324,8 +342,9 @@ bool SGSkyDome::repaint( sgVec4 sky_color, sgVec4 fog_color, double sun_angle ) // printf("sky = %.2f fog = %.2f diff = %.2f\n", // l->sky_color[j], l->fog_color[j], diff); - upper_color[i][j] = sky_color[j] - diff * 0.3; - middle_color[i][j] = sky_color[j] - diff * 0.9 + middle_amt[j]; + upper_color[i][j] = sky_color[j] - diff * ( 1.0 - vis_factor * 0.7); + middle_color[i][j] = sky_color[j] - diff * ( 1.0 - vis_factor * 0.1) + + middle_amt[j]; lower_color[i][j] = fog_color[j] + outer_amt[j]; if ( upper_color[i][j] > 1.0 ) { upper_color[i][j] = 1.0; } @@ -364,8 +383,9 @@ bool SGSkyDome::repaint( sgVec4 sky_color, sgVec4 fog_color, double sun_angle ) // printf("sky = %.2f fog = %.2f diff = %.2f\n", // sky_color[j], fog_color[j], diff); - upper_color[i][j] = sky_color[j] - diff * 0.3; - middle_color[i][j] = sky_color[j] - diff * 0.9 + middle_amt[j]; + upper_color[i][j] = sky_color[j] - diff * ( 1.0 - vis_factor * 0.7); + middle_color[i][j] = sky_color[j] - diff * ( 1.0 - vis_factor * 0.1) + + middle_amt[j]; lower_color[i][j] = fog_color[j] + outer_amt[j]; if ( upper_color[i][j] > 1.0 ) { upper_color[i][j] = 1.0; } @@ -410,7 +430,7 @@ bool SGSkyDome::repaint( sgVec4 sky_color, sgVec4 fog_color, double sun_angle ) slot = center_disk_cl->get( counter++ ); // sgVec4 red; // sgSetVec4( red, 1.0, 0.0, 0.0, 1.0 ); - sgCopyVec4( slot, sky_color ); + sgCopyVec4( slot, center_color ); for ( i = 11; i >= 0; i-- ) { slot = center_disk_cl->get( counter++ ); sgCopyVec4( slot, upper_color[i] ); diff --git a/simgear/sky/dome.hxx b/simgear/sky/dome.hxx index e90f8976..cb7280b1 100644 --- a/simgear/sky/dome.hxx +++ b/simgear/sky/dome.hxx @@ -69,7 +69,8 @@ public: // 0 degrees = high noon // 90 degrees = sun rise/set // 180 degrees = darkest midnight - bool repaint( sgVec3 sky_color, sgVec3 fog_color, double sun_angle ); + bool repaint( sgVec3 sky_color, sgVec3 fog_color, double sun_angle, + double vis ); // reposition the sky at the specified origin and orientation // lon specifies a rotation about the Z axis diff --git a/simgear/sky/sky.cxx b/simgear/sky/sky.cxx index 38a5f181..1b485d27 100644 --- a/simgear/sky/sky.cxx +++ b/simgear/sky/sky.cxx @@ -44,6 +44,8 @@ SGSky::SGSky( void ) { puff_progression = 0; ramp_up = 0.15; ramp_down = 0.15; + // ramp_up = 4.0; + // ramp_down = 4.0; } @@ -129,7 +131,7 @@ bool SGSky::repaint( sgVec4 sky_color, sgVec4 fog_color, { if ( effective_visibility > 1000.0 ) { enable(); - dome->repaint( sky_color, fog_color, sun_angle ); + dome->repaint( sky_color, fog_color, sun_angle, effective_visibility ); oursun->repaint( sun_angle ); moon->repaint( moon_angle ); planets->repaint( sun_angle, nplanets, planet_data ); @@ -185,7 +187,7 @@ void SGSky::preDraw() { // draw translucent clouds ... do this after you've drawn all the // oapaque elements of your scene. void SGSky::postDraw( float alt ) { - float slop = 4.0; // if we are closer than this to a cloud layer, + float slop = 5.0; // if we are closer than this to a cloud layer, // don't draw clouds int in_cloud = -1; // cloud we are in diff --git a/simgear/sky/sky.hxx b/simgear/sky/sky.hxx index d07ea94b..eaaf3f4f 100644 --- a/simgear/sky/sky.hxx +++ b/simgear/sky/sky.hxx @@ -78,10 +78,10 @@ private: // near cloud visibility state variables bool in_puff; - double puff_length; - double puff_progression; - double ramp_up; - double ramp_down; + double puff_length; // in seconds + double puff_progression; // in seconds + double ramp_up; // in seconds + double ramp_down; // in seconds public: -- 2.39.5