]> git.mxchange.org Git - flightgear.git/commitdiff
Fix a big where the initial ground elevation reported could be bogus
authorcurt <curt>
Fri, 22 Feb 2002 20:20:23 +0000 (20:20 +0000)
committercurt <curt>
Fri, 22 Feb 2002 20:20:23 +0000 (20:20 +0000)
(initialization order problem.)

src/Main/main.cxx
src/Main/viewer_rph.cxx
src/Scenery/tilemgr.cxx

index 2138035575944ca6970f3fc7485e913c9787999c..82b5ecfc21ab860ae75d468b7add2628ab750c64 100644 (file)
@@ -1535,6 +1535,9 @@ int mainLoop( int argc, char **argv ) {
     glTexEnvf( GL_TEXTURE_FILTER_CONTROL_EXT, GL_TEXTURE_LOD_BIAS_EXT, -0.5 ) ;
 #endif
 
+    // Set position relative to glide slope if requested
+    fgSetPosFromGlideSlope();
+
     // set current_options lon/lat if an airport id is specified
     // cout << "3. airport_id = " << fgGetString("/sim/startup/airport-id") << endl;
     if ( fgGetString("/sim/startup/airport-id").length() ) {
index adb3de49e8d7fe6258d9b5f84bebce54a3910921..8ade689c6554b5fba397e2d5ee648eaacba6bf1d 100644 (file)
@@ -199,6 +199,8 @@ void FGViewerRPH::update() {
            << abs_view_pos[0] << ","
            << abs_view_pos[1] << ","
            << abs_view_pos[2] );
+    SG_LOG( SG_VIEW, SG_DEBUG, "Scenery center = "
+           << sc[0] << "," << sc[1] << "," << sc[2] );
     SG_LOG( SG_VIEW, SG_DEBUG, "(RPH) Relative view pos = "
            << view_pos[0] << "," << view_pos[1] << "," << view_pos[2] );
 
index 59f3c5fba60467e37cf22d265480056b82a6bfc0..b2cae1215aff9102b03b187b4ff885c6050fbbca 100644 (file)
@@ -76,6 +76,7 @@ queue<FGDeferredModel *> FGTileMgr::model_queue;
 // Constructor
 FGTileMgr::FGTileMgr():
     state( Start ),
+    current_tile( NULL ),
     vis( 16000 ),
     counter_hack(0)
 {
@@ -280,6 +281,7 @@ int FGTileMgr::update( double lon, double lat ) {
         scenery.set_next_center( current_tile->center );
     } else {
         SG_LOG( SG_TERRAIN, SG_WARN, "Tile not found (Ok if initializing)" );
+        scenery.set_next_center( Point3D(0.0) );
     }
 
     if ( state == Running ) {
@@ -351,9 +353,9 @@ int FGTileMgr::update( double lon, double lat ) {
 
     sgdVec3 sc;
     sgdSetVec3( sc,
-               scenery.get_center()[0],
-               scenery.get_center()[1],
-               scenery.get_center()[2] );
+                scenery.get_center()[0],
+                scenery.get_center()[1],
+                scenery.get_center()[2] );
 
 #if 0
     if ( scenery.center == Point3D(0.0) ) {
@@ -382,21 +384,49 @@ int FGTileMgr::update( double lon, double lat ) {
        cout << "result = " << scenery.get_cur_elev() << endl;
     } else {
 #endif
-       // cout << "abs view pos = " << current_view.abs_view_pos
-       //      << " view pos = " << current_view.view_pos << endl;
-       double tmp_elev;
-       double tmp_radius;
-       sgdVec3 tmp_normal;
-       if ( fgCurrentElev(globals->get_current_view()->get_abs_view_pos(),
-                          sc, &hit_list,
-                          &tmp_elev, &tmp_radius, tmp_normal) )
-       {
-           scenery.set_cur_elev( tmp_elev );
-           scenery.set_cur_radius( tmp_radius );
-           scenery.set_cur_normal( tmp_normal );
-       } else {
-           scenery.set_cur_elev( -9999.0 );
-       }
+        /*
+       cout << "abs view pos = "
+             << globals->get_current_view()->get_abs_view_pos()[0] << ","
+             << globals->get_current_view()->get_abs_view_pos()[1] << ","
+             << globals->get_current_view()->get_abs_view_pos()[2]
+            << " view pos = " 
+             << globals->get_current_view()->get_view_pos()[0] << ","
+             << globals->get_current_view()->get_view_pos()[1] << ","
+             << globals->get_current_view()->get_view_pos()[2]
+             << endl;
+        cout << "current_tile = " << current_tile << endl;
+        cout << "Scenery center = " << sc[0] << "," << sc[1] << "," << sc[2]
+             << endl;
+        */
+
+        // overridden with actual values if a terrain intersection is
+        // found
+       double hit_elev = -9999.0;
+       double hit_radius = 0.0;
+       sgdVec3 hit_normal = { 0.0, 0.0, 0.0 };
+
+        bool hit = false;
+        if ( fabs(sc[0]) > 1.0 || fabs(sc[1]) > 1.0 || fabs(sc[2]) > 1.0 ) {
+            // scenery center has been properly defined so any hit
+            // should be valid (and not just luck)
+            hit = fgCurrentElev(globals->get_current_view()->get_abs_view_pos(),
+                                sc,
+                                &hit_list,
+                                &hit_elev,
+                                &hit_radius,
+                                hit_normal);
+        }
+
+        if ( hit ) {
+            scenery.set_cur_elev( hit_elev );
+            scenery.set_cur_radius( hit_radius );
+            scenery.set_cur_normal( hit_normal );
+        } else {
+            scenery.set_cur_elev( -9999.0 );
+            scenery.set_cur_radius( 0.0 );
+            scenery.set_cur_normal( hit_normal );
+        }
+
        // cout << "Current elevation = " << scenery.get_cur_elev() << endl;
 #if 0
     }