]> git.mxchange.org Git - simgear.git/commitdiff
Smarter vasi coloring.
authorcurt <curt>
Tue, 30 Dec 2003 07:04:05 +0000 (07:04 +0000)
committercurt <curt>
Tue, 30 Dec 2003 07:04:05 +0000 (07:04 +0000)
simgear/scene/tgdb/pt_lights.cxx
simgear/scene/tgdb/vasi.hxx

index 6512a9e063892f313a7cf334120f92828f51d8ee..42eb4671bfe6880853d195e99ba31f36d7db0051 100644 (file)
@@ -34,7 +34,7 @@
 // strobe pre-draw (we want a larger point size)
 static int StrobePreDraw( ssgEntity *e ) {
     glPushAttrib( GL_POINT_BIT );
-    glPointSize(4.0);
+    glPointSize(3.0);
     glEnable(GL_POINT_SMOOTH);
 
     return true;
@@ -631,8 +631,8 @@ ssgBranch *sgMakeDirectionalLights( const point_list &nodes,
         // structure.
         ssgRangeSelector *lod = (ssgRangeSelector *)light_group->getKid(0);
         ssgLeaf *leaf = (ssgLeaf *)lod->getKid(0);
-        leaf->setCallback( SSG_CALLBACK_PREDRAW, StrobePreDraw );
-        leaf->setCallback( SSG_CALLBACK_POSTDRAW, StrobePostDraw );
+        // leaf->setCallback( SSG_CALLBACK_PREDRAW, StrobePreDraw );
+        // leaf->setCallback( SSG_CALLBACK_POSTDRAW, StrobePostDraw );
 
         SGVASIUserData *vasi = new SGVASIUserData( pos, leaf );
 
index 388aecfac1aee9b073b58ac866241b4136da5b4d..f36271a98ee25683a13b316749ad357b531dbbc2 100644 (file)
@@ -64,14 +64,116 @@ public:
 
     double get_alt_m() { return alt_m; }
     double *get_abs_pos() { return abs_pos; }
+    int i;
 
-    // color is a number in the range of 0.0 = full red, 1.0 = full white
-    void set_color( float color ) {
+    // color the vasi/papi correctly based on angle
+    void set_color( float angle_deg ) {
         int count = leaf->getNumColours();
-        for ( int i = 0; i < count; ++i ) {
-            float *entry = leaf->getColour( i );
-            entry[1] = color;
-            entry[2] = color;
+        double trans = 0.05;
+        double color = 1.0;
+        double ref;
+        float *entry;
+
+        if ( count == 12 ) {
+            // PAPI configuration
+
+            // papi D
+            ref = 3.5;
+            if ( angle_deg < ref - trans ) {
+                color = 0.0;
+            } else if ( angle_deg < ref + trans ) {
+                color = (ref + trans - angle_deg) * (1 / (2 * trans) );
+            } else {
+                color = 1.0;
+            }
+            for ( i = 0; i < 3; ++i ) {
+                entry = leaf->getColour( i );
+                entry[1] = color;
+                entry[2] = color;
+            }
+
+            // papi C
+            ref = 3.167;
+            if ( angle_deg < ref - trans ) {
+                color = 0.0;
+            } else if ( angle_deg < ref + trans ) {
+                color = (ref + trans - angle_deg) * (1 / (2 * trans) );
+            } else {
+                color = 1.0;
+            }
+            for ( i = 3; i < 6; ++i ) {
+                entry = leaf->getColour( i );
+                entry[1] = color;
+                entry[2] = color;
+            }
+
+            // papi B
+            ref = 2.833;
+            if ( angle_deg < ref - trans ) {
+                color = 0.0;
+            } else if ( angle_deg < ref + trans ) {
+                color = (ref + trans - angle_deg) * (1 / (2 * trans) );
+            } else {
+                color = 1.0;
+            }
+            for ( i = 6; i < 9; ++i ) {
+                entry = leaf->getColour( i );
+                entry[1] = color;
+                entry[2] = color;
+            }
+
+            // papi A
+            ref = 2.5;
+            if ( angle_deg < ref - trans ) {
+                color = 0.0;
+            } else if ( angle_deg < ref + trans ) {
+                color = (ref + trans - angle_deg) * (1 / (2 * trans) );
+            } else {
+                color = 1.0;
+            }
+            for ( i = 9; i < 12; ++i ) {
+                entry = leaf->getColour( i );
+                entry[1] = color;
+                entry[2] = color;
+            }
+        } else if ( count == 36 ) {
+            // probably vasi, first 18 are downwind bar (2.5 deg)
+            ref = 2.5;
+            if ( angle_deg < ref - trans ) {
+                color = 0.0;
+            } else if ( angle_deg < ref + trans ) {
+                color = (ref + trans - angle_deg) * (1 / (2 * trans) );
+            } else {
+                color = 1.0;
+            }
+            for ( int i = 0; i < 18; ++i ) {
+                entry = leaf->getColour( i );
+                entry[1] = color;
+                entry[2] = color;
+            }
+
+            // last 6 are upwind bar (3.0 deg)
+            ref = 3.0;
+            if ( angle_deg < ref - trans ) {
+                color = 0.0;
+            } else if ( angle_deg < ref + trans ) {
+                color = (ref + trans - angle_deg) * (1 / (2 * trans) );
+            } else {
+                color = 1.0;
+            }
+            for ( int i = 18; i < 36; ++i ) {
+                entry = leaf->getColour( i );
+                entry[1] = color;
+                entry[2] = color;
+            }
+        } else {
+            // fail safe
+            cout << "unknown vasi/papi configuration, count = " << count << endl;
+            for ( int i = 0; i < count; ++i ) {
+                entry = leaf->getColour( i );
+                entry[1] = color;
+                entry[2] = color;
+            }
         }
     }
 };