]> git.mxchange.org Git - simgear.git/commitdiff
Harald JOHSEN: the sky color now fades to black with altitude
authorehofman <ehofman>
Sun, 23 Oct 2005 11:46:41 +0000 (11:46 +0000)
committerehofman <ehofman>
Sun, 23 Oct 2005 11:46:41 +0000 (11:46 +0000)
simgear/scene/sky/dome.cxx
simgear/scene/sky/dome.hxx

index aeed23c150ba92ab1a28df350277ffa2b14ebc54..a33b219b86906ac20b0e0e3b61a51405d08c938d 100644 (file)
@@ -95,6 +95,7 @@ static int sgSkyDomePostDraw( ssgEntity *e ) {
 
 // Constructor
 SGSkyDome::SGSkyDome( void ) {
+    asl = 0.0f;
 }
 
 
@@ -273,6 +274,13 @@ ssgBranch * SGSkyDome::build( double hscale, double vscale ) {
     return dome_transform;
 }
 
+static void fade_to_black( sgVec4 sky_color[], float asl, int count) {
+    const float ref_asl = 10000.0f;
+    const sgVec3 space_color = {0.0f, 0.0f, 0.0f};
+    float d = exp( - asl / ref_asl );
+    for(int i = 0; i < count ; i++)
+        sgLerpVec3( sky_color[i], sky_color[i], space_color, 1.0 - d);
+}
 
 // repaint the sky colors based on current value of sun_angle, sky,
 // and fog colors.  This updates the color arrays for ssgVtxTable.
@@ -437,6 +445,11 @@ bool SGSkyDome::repaint( sgVec4 sky_color, sgVec4 fog_color, double sun_angle,
        */
    }
 
+    fade_to_black( (sgVec4 *) center_color, asl * center_elev, 1);
+    fade_to_black( upper_color, (asl+0.05f) * upper_elev, 12);
+    fade_to_black( middle_color, (asl+0.05f) * middle_elev, 12);
+    fade_to_black( lower_color, (asl+0.05f) * lower_elev, 12);
+
     for ( i = 0; i < 12; i++ ) {
        sgCopyVec4( bottom_color[i], fog_color );
     }
@@ -555,6 +568,6 @@ bool SGSkyDome::reposition( sgVec3 p, double lon, double lat, double spin ) {
     sgSetCoord( &skypos, TRANSFORM );
 
     dome_transform->setTransform( &skypos );
-
+    asl = - skypos.xyz[2];
     return true;
 }
index e30985ce3d1ccf5002c15655c6122d7b4ac2dedc..4cd2b8778a7716096e2ddc5091991a09e266c914 100644 (file)
@@ -51,6 +51,8 @@ class SGSkyDome {
     ssgVertexArray *lower_ring_vl;
     ssgColourArray *lower_ring_cl;
 
+    float   asl;
+
 public:
 
     // Constructor