]> git.mxchange.org Git - simgear.git/commitdiff
Bugfix: remove SGSky minimum distance check.
authorJames Turner <zakalawe@mac.com>
Thu, 19 Dec 2013 17:20:06 +0000 (17:20 +0000)
committerJames Turner <zakalawe@mac.com>
Thu, 19 Dec 2013 17:20:06 +0000 (17:20 +0000)
Without this, various sky rendering modes exhibit artefacts in low-
visibility conditions. The cost of always rendering the dome is
negligible. (And Rembrandt already had to work this way)

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

index 77a491b7c46b33f9e259a9f15009670a28ba10e4..ed7b13e05df2d1c2ff3d3fb8ab815750809b1e96 100644 (file)
@@ -39,7 +39,6 @@
 // Constructor
 SGSky::SGSky( void ) {
     effective_visibility = visibility = 10000.0;
-    minimum_sky_visibility = 1000;
 
     // near cloud visibility state variables
     in_puff = false;
@@ -62,10 +61,8 @@ SGSky::SGSky( void ) {
     cloud_root = new osg::Group;
     cloud_root->setNodeMask(simgear::MODEL_BIT);
     cloud_root->setName("SGSky-cloud-root");
-    pre_selector = new osg::Switch;
 
     pre_transform = new osg::Group;
-
     _ephTransform = new osg::MatrixTransform;
     
     // Set up a RNG that is repeatable within 10 minutes to ensure that clouds
@@ -103,9 +100,7 @@ void SGSky::build( double h_radius_m, double v_radius_m,
     oursun = new SGSun;
     _ephTransform->addChild( oursun->build(tex_path, sun_size, property_tree_node ) );
 
-    pre_selector->addChild( pre_transform.get() );
-
-    pre_root->addChild( pre_selector.get() );    
+    pre_root->addChild( pre_transform.get() );
 }
 
 
@@ -118,8 +113,6 @@ void SGSky::build( double h_radius_m, double v_radius_m,
 // 180 degrees = darkest midnight
 bool SGSky::repaint( const SGSkyColor &sc, const SGEphemeris& eph )
 {
-    if ( effective_visibility > minimum_sky_visibility ) {
-       enable();
        dome->repaint( sc.adj_sky_color, sc.sky_color, sc.fog_color,
                        sc.sun_angle, effective_visibility );
 
@@ -133,10 +126,7 @@ bool SGSky::repaint( const SGSkyColor &sc, const SGEphemeris& eph )
                 cloud_layers[i]->repaint( sc.cloud_color );
             }
        }
-    } else {
-       // turn off sky
-       disable();
-    }
+
     SGCloudField::updateFog((double)effective_visibility,
                             osg::Vec4f(toOsg(sc.fog_color), 1.0f));
     return true;
@@ -195,6 +185,12 @@ bool SGSky::reposition( const SGSkyState &st, const SGEphemeris& eph, double dt
     return true;
 }
 
+void
+SGSky::set_visibility( float v )
+{
+    visibility = std::max(v, 25.0f);
+}
+
 void
 SGSky::add_cloud_layer( SGCloudLayer * layer )
 {
@@ -297,16 +293,6 @@ void SGSky::set_3dCloudUseImpostors(bool imp)
     SGCloudField::setUseImpostors(imp);
 }
 
-float SGSky::get_minimum_sky_visibility() const 
-{
-    return minimum_sky_visibility;
-}
-
-void SGSky::set_minimum_sky_visibility( float value )
-{
-    minimum_sky_visibility = value;
-}
-
 void SGSky::texture_path( const string& path ) {
        tex_path = SGPath( path );
 }
index df325884f7dd003cfbebfd6bdb7f682ce4658ec9..caf1f0fb7dc5f18992b5aebb79cdbd37fb0fbb4b 100644 (file)
@@ -43,7 +43,6 @@
 #include <osg/ref_ptr>
 #include <osg/MatrixTransform>
 #include <osg/Node>
-#include <osg/Switch>
 
 #include <simgear/ephemeris/ephemeris.hxx>
 #include <simgear/math/SGMath.hxx>
@@ -224,7 +223,6 @@ private:
     layer_list_type cloud_layers;
 
     osg::ref_ptr<osg::Group> pre_root, cloud_root;
-    osg::ref_ptr<osg::Switch> pre_selector;
     osg::ref_ptr<osg::Group> pre_transform;
 
     osg::ref_ptr<osg::MatrixTransform> _ephTransform;
@@ -234,7 +232,6 @@ private:
     // visibility
     float visibility;
     float effective_visibility;
-    float minimum_sky_visibility;
 
     int in_cloud;
 
@@ -357,19 +354,6 @@ public:
      */
     void texture_path( const string& path );
 
-    /** Enable drawing of the sky. */
-    inline void enable() {
-        pre_selector->setValue(0, 1);
-    }
-
-    /**
-     * Disable drawing of the sky in the scene graph.  The leaf node is still
-     * there, how ever it won't be traversed on by ssgCullandRender()
-     */
-    inline void disable() {
-        pre_selector->setValue(0, 0);
-    }
-
     /**
      * Get the current sun color
      */
@@ -421,14 +405,12 @@ public:
 
 
     /** @return current effective visibility */
-    inline float get_visibility() const { return effective_visibility; }
+    float get_visibility() const { return effective_visibility; }
 
     /** Set desired clear air visibility.
      * @param v visibility in meters
      */
-    inline void set_visibility( float v ) {
-       effective_visibility = visibility = (v <= 25.0) ? 25.0 : v;
-    }
+    void set_visibility( float v );
 
     /** Get 3D cloud density */
     double get_3dCloudDensity() const;
@@ -487,10 +469,5 @@ public:
     void set_3dCloudWrap(bool wrap);
 
 
-    /** Get minimum sky visibility */
-    float get_minimum_sky_visibility() const;
-
-    /** Set minimum sky visibility */
-    void set_minimum_sky_visibility( float value );
 };
 #endif // _SG_SKY_HXX