]> git.mxchange.org Git - flightgear.git/commitdiff
Fixed a problem with the initial starting altitude. "v->abs_view_pos" wasn't
authorcurt <curt>
Sun, 6 Dec 1998 14:52:54 +0000 (14:52 +0000)
committercurt <curt>
Sun, 6 Dec 1998 14:52:54 +0000 (14:52 +0000)
being calculated correctly at the beginning causing the first terrain
intersection to fail, returning a ground altitude of zero, causing the plane
to free fall for one frame, until the ground altitude was corrected, but now
being under the ground we got a big bounce and the plane always ended up
upside down.

Main/GLUTmain.cxx
Main/fg_init.cxx
Main/options.cxx

index 017bb9bf2e5a7d87be5091f7c3e4c4b5c7746d0e..9ad1a0c484c82189cf7ca7203eae6b0e24e810e1 100644 (file)
@@ -474,10 +474,10 @@ static void fgMainLoop( void ) {
     // Fix elevation.  I'm just sticking this here for now, it should
     // probably move eventually
 
-    printf("Before - ground = %.2f  runway = %.2f  alt = %.2f\n",
+    /* printf("Before - ground = %.2f  runway = %.2f  alt = %.2f\n",
           scenery.cur_elev,
           f->get_Runway_altitude() * FEET_TO_METER,
-          f->get_Altitude() * FEET_TO_METER);
+          f->get_Altitude() * FEET_TO_METER); */
 
     if ( scenery.cur_elev > -9990 ) {
        if ( f->get_Altitude() * FEET_TO_METER < 
@@ -498,10 +498,10 @@ static void fgMainLoop( void ) {
        f->set_Runway_altitude( scenery.cur_elev * METER_TO_FEET );
     }
 
-    printf("Adjustment - ground = %.2f  runway = %.2f  alt = %.2f\n",
+    /* printf("Adjustment - ground = %.2f  runway = %.2f  alt = %.2f\n",
           scenery.cur_elev,
           f->get_Runway_altitude() * FEET_TO_METER,
-          f->get_Altitude() * FEET_TO_METER);
+          f->get_Altitude() * FEET_TO_METER); */
 
     // update "time"
     fgTimeUpdate(f, t);
@@ -1012,6 +1012,14 @@ int main( int argc, char **argv ) {
 
 
 // $Log$
+// Revision 1.74  1998/12/06 14:52:54  curt
+// Fixed a problem with the initial starting altitude.  "v->abs_view_pos" wasn't
+// being calculated correctly at the beginning causing the first terrain
+// intersection to fail, returning a ground altitude of zero, causing the plane
+// to free fall for one frame, until the ground altitude was corrected, but now
+// being under the ground we got a big bounce and the plane always ended up
+// upside down.
+//
 // Revision 1.73  1998/12/06 13:51:22  curt
 // Turned "struct fgWEATHER" into "class FGWeather".
 //
index a767e7a23ed0a39e990660d607fe03e84c2d1545..093b7585b87f1298ec9b596149fd185d949c33c4 100644 (file)
@@ -158,7 +158,7 @@ int fgInitSubsystems( void )
     fgLIGHT *l;
     fgTIME *t;
     fgVIEW *v;
-    Point3D geod_pos, abs_view_pos;
+    Point3D geod_pos, tmp_abs_view_pos;
 
     l = &cur_light_params;
     t = &cur_time_params;
@@ -195,21 +195,23 @@ int fgInitSubsystems( void )
     }
 
     // Calculate ground elevation at starting point (we didn't have
-    // abs_view_pos calculated when fgTileMgrUpdate() was called above
+    // tmp_abs_view_pos calculated when fgTileMgrUpdate() was called above
 
     // calculalate a cartesian point somewhere along the line between
     // the center of the earth and our view position.  Doesn't have to
     // be the exact elevation (this is good because we don't know it
     // yet :-)
     geod_pos = Point3D( f->get_Longitude(), f->get_Latitude(), 0.0);
-    abs_view_pos = fgGeodToCart(geod_pos);
+    tmp_abs_view_pos = fgGeodToCart(geod_pos);
 
     FG_LOG( FG_GENERAL, FG_DEBUG, 
            "Altitude before update " << scenery.cur_elev );
+    FG_LOG( FG_GENERAL, FG_DEBUG, 
+           "Initial abs_view_pos = " << tmp_abs_view_pos );
     scenery.cur_elev = 
        fgTileMgrCurElevOLD( f->get_Longitude(), 
                             f->get_Latitude(),
-                            abs_view_pos );
+                            tmp_abs_view_pos );
     FG_LOG( FG_GENERAL, FG_DEBUG, 
            "Altitude after update " << scenery.cur_elev );
     f->set_Runway_altitude( scenery.cur_elev * METER_TO_FEET );
@@ -224,8 +226,21 @@ int fgInitSubsystems( void )
            << (f->get_Latitude() * RAD_TO_DEG) << ", " 
            << (f->get_Longitude() * RAD_TO_DEG) << ", " 
            << (f->get_Altitude() * FEET_TO_METER) << ")" );
-    // end of thing that I just stuck in that I should probably move
-               
+
+    // We need to calculate a few more values here that would normally
+    // be calculated by the FDM so that the v->UpdateViewMath()
+    // routine doesn't get hosed.
+
+    double sea_level_radius_meters;
+    double lat_geoc;
+    // Set the FG variables first
+    fgGeodToGeoc( f->get_Latitude(), f->get_Altitude(), 
+                 &sea_level_radius_meters, &lat_geoc);
+    f->set_Geocentric_Position( lat_geoc, f->get_Longitude(), 
+                               f->get_Altitude() + 
+                               (sea_level_radius_meters * METER_TO_FEET) );
+    f->set_Sea_level_radius( sea_level_radius_meters * METER_TO_FEET );
+
     // The following section sets up the flight model EOM parameters
     // and should really be read in from one or more files.
 
@@ -370,6 +385,14 @@ int fgInitSubsystems( void )
 
 
 // $Log$
+// Revision 1.57  1998/12/06 14:52:56  curt
+// Fixed a problem with the initial starting altitude.  "v->abs_view_pos" wasn't
+// being calculated correctly at the beginning causing the first terrain
+// intersection to fail, returning a ground altitude of zero, causing the plane
+// to free fall for one frame, until the ground altitude was corrected, but now
+// being under the ground we got a big bounce and the plane always ended up
+// upside down.
+//
 // Revision 1.56  1998/12/06 13:51:23  curt
 // Turned "struct fgWEATHER" into "class FGWeather".
 //
index b9e7b79fd3c021d4c487b6ba0d2428d1ddcd6fe7..98f09e59f47939ba1ea3cdacd377e45e53b36e9a 100644 (file)
@@ -414,7 +414,11 @@ int fgOPTIONS::parse_option( const string& arg ) {
     } else if ( arg.find( "--lat=" ) != string::npos ) {
        lat = parse_degree( arg.substr(6) );
     } else if ( arg.find( "--altitude=" ) != string::npos ) {
-       altitude = atof( arg.substr(11) );
+       if ( units == FG_UNITS_FEET ) {
+           altitude = atof( arg.substr(11) ) * FEET_TO_METER;
+       } else {
+           altitude = atof( arg.substr(11) );
+       }
     } else if ( arg.find( "--heading=" ) != string::npos ) {
        heading = atof( arg.substr(10) );
     } else if ( arg.find( "--roll=" ) != string::npos ) {
@@ -579,7 +583,8 @@ void fgOPTIONS::usage ( void ) {
     printf("\t--airport-id=ABCD:  specify starting postion by airport id\n");
     printf("\t--lon=degrees:  starting longitude in degrees (west = -)\n");
     printf("\t--lat=degrees:  starting latitude in degrees (south = -)\n");
-    printf("\t--altitude=meters:  starting altitude in meters\n");
+    printf("\t--altitude=feet:  starting altitude in feet\n");
+    printf("\t\t(unless --units-meters specified\n");
     printf("\t--heading=degrees:  heading (yaw) angle in degress (Psi)\n");
     printf("\t--roll=degrees:  roll angle in degrees (Phi)\n");
     printf("\t--pitch=degrees:  pitch angle in degrees (Theta)\n");
@@ -624,6 +629,14 @@ fgOPTIONS::~fgOPTIONS( void ) {
 
 
 // $Log$
+// Revision 1.35  1998/12/06 14:52:57  curt
+// Fixed a problem with the initial starting altitude.  "v->abs_view_pos" wasn't
+// being calculated correctly at the beginning causing the first terrain
+// intersection to fail, returning a ground altitude of zero, causing the plane
+// to free fall for one frame, until the ground altitude was corrected, but now
+// being under the ground we got a big bounce and the plane always ended up
+// upside down.
+//
 // Revision 1.34  1998/12/05 15:54:22  curt
 // Renamed class fgFLIGHT to class FGState as per request by JSB.
 //