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.
This commit is contained in:
parent
1c789b7ab6
commit
800b484493
3 changed files with 56 additions and 12 deletions
|
@ -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".
|
||||
//
|
||||
|
|
|
@ -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".
|
||||
//
|
||||
|
|
|
@ -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.
|
||||
//
|
||||
|
|
Loading…
Add table
Reference in a new issue