]> git.mxchange.org Git - simgear.git/commitdiff
Stuart Buchanan :
authorfredb <fredb>
Fri, 19 Dec 2008 07:39:09 +0000 (07:39 +0000)
committerfredb <fredb>
Fri, 19 Dec 2008 07:39:09 +0000 (07:39 +0000)
Attached is yet another 3D clouds patch, to fix the following:
1) The 3D clouds were not modified by the cloud coverage, due to some problems with osg::Switch
2) METAR changes to cloud coverage were not obeyed.
3) Making changes via the Cloud dialog had no effect unless 3D clouds were toggled.
4) Cloud cover was too sparse.
5) 3D Stratus clouds caused performance issues on some hardware (fixed by removing 3D stratus from cloudlayers.xml - it will now be a 2D layer).

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

index 313e255a06fe68bc8faff49c039666f6df92deef..a567c91e0e81b8106d43ebca02270ca6894fe0d6 100644 (file)
@@ -68,7 +68,6 @@ using namespace simgear;
 #endif
 
 float SGCloudField::fieldSize = 50000.0f;
-float SGCloudField::coverage = 1.0f;
 double SGCloudField::timer_dt = 0.0;
 float SGCloudField::view_distance = 20000.0f;
 sgVec3 SGCloudField::view_vec, SGCloudField::view_X, SGCloudField::view_Y;
@@ -151,6 +150,7 @@ SGCloudField::SGCloudField() :
        deltay(0.0),
        last_course(0.0),
        last_coverage(0.0),
+        coverage(0.0),
         defined3D(false),
         reposition_count(0)
 {
@@ -211,10 +211,7 @@ void SGCloudField::clear(void) {
     for (int x = 0; x < QUADTREE_SIZE; x++) {
         for (int y = 0; y < QUADTREE_SIZE; y++) {
             int num_children = field_group[x][y]->getNumChildren();
-
-            for (int i = 0; i < num_children; i++) {
-                field_group[x][y]->removeChild(i);
-            }
+            field_group[x][y]->removeChildren(0, num_children);
         }
     }
     
@@ -239,7 +236,7 @@ static int densTable[][10] = {
 void SGCloudField::applyCoverage(void) {
 
         int row = (int) (coverage * 10.0);
-        if (row > 10) row = 9;
+        if (row > 9) row = 9;
         int col = 0;
 
         if (coverage != last_coverage) {
index f844a98df85b4b739794718e294fbc6164366d32..beab904d8aedeeb4c140b5fff7d027214b60d804 100644 (file)
@@ -83,7 +83,8 @@ private:
        double deltax, deltay, alt;
         double last_course;
         sgSphere field_sphere;
-       float   last_coverage;
+       float last_coverage;
+        float coverage;
         SGGeoc cld_pos;
         int reposition_count;
         struct CloudFog : public simgear::Singleton<CloudFog>
@@ -121,15 +122,14 @@ public:
 
        static sgVec3 view_vec, view_X, view_Y;
 
-       static float coverage;
         static float view_distance;
         static double timer_dt;
        static float fieldSize;
        
         bool defined3D;
 
-       static float getCoverage(void) { return coverage; }
-       static void setCoverage(float coverage) { coverage = coverage; }
+       float getCoverage(void) { return coverage; }
+       void setCoverage(float c) { coverage = c; }
 
         static float getVisRange(void) { return view_distance; }
         static void setVisRange(float d) { view_distance = d; }