]> git.mxchange.org Git - simgear.git/commitdiff
Set sun color below horizon
authorTorsten Dreyer <Torsten@t3r.de>
Wed, 8 Oct 2014 10:45:01 +0000 (12:45 +0200)
committerTorsten Dreyer <Torsten@t3r.de>
Wed, 8 Oct 2014 10:45:01 +0000 (12:45 +0200)
Thorsten Renk:
The following patch sets the sun color to alpha=0 when
the sun is below the local horizon, removing the oddity
that the sun is seen 'through' the terrain when the terrain
at large distance is rendered by the skydome.

simgear/scene/sky/oursun.cxx
simgear/scene/sky/oursun.hxx

index a267034fec4adaa716055087b17d0053ad6cc923..f4b049ee99f91b8657a9d89983b54d5b52a28b07 100644 (file)
@@ -52,7 +52,7 @@ using namespace simgear;
 // Constructor
 SGSun::SGSun( void ) :
     visibility(-9999.0), prev_sun_angle(-9999.0), path_distance(60000.0),
-    sun_exp2_punch_through(7.0e-06)
+    sun_exp2_punch_through(7.0e-06), horizon_angle(0.0)
 {
 
 }
@@ -341,6 +341,13 @@ bool SGSun::repaint( double sun_angle, double new_visibility ) {
         gamma_correct_rgb( scene_color._v );
         gamma_correct_rgb( sun_color._v );
 
+       if (sun_angle >91.0 * 3.1415/180.0 + horizon_angle)
+               {
+               sun_color[3] = 0;
+               o_halo_color[3]=0;
+               i_halo_color[3]=0;
+               }
+
         (*sun_cl)[0] = sun_color;
         sun_cl->dirty();
         (*scene_cl)[0] = scene_color;
@@ -404,6 +411,9 @@ bool SGSun::reposition( double rightAscension, double declination,
 
          if ( alt_half < 0.0 ) alt_half = 0.0;
 
+        //angle at which the sun is visible below the horizon
+        horizon_angle = acos(r_earth/position_radius);
+
          // Push the data to the property tree, so it can be used in the enviromental code
          if ( env_node ){
             env_node->setDoubleValue( "atmosphere/altitude-troposphere-top", r_tropo - r_earth );
index 3414c862656fd7078b44e63b6c8d76a7257cc32c..bd1f3db10895653985ecfb2f8eb8c572617c5f35 100644 (file)
@@ -51,6 +51,7 @@ class SGSun : public SGReferenced {
     // distance of light traveling through the atmosphere
     double path_distance;
     double sun_exp2_punch_through;
+    double horizon_angle;
 
     SGPropertyNode_ptr env_node;