+ // calculate our current position in cartesian space
+ scenery.center = scenery.next_center;
+ // printf("scenery center = %.2f %.2f %.2f\n", scenery.center.x(),
+ // scenery.center.y(), scenery.center.z());
+
+ FGViewerRPH *pilot_view =
+ (FGViewerRPH *)globals->get_viewmgr()->get_view( 0 );
+
+ pilot_view->set_geod_view_pos( cur_fdm_state->get_Longitude(),
+ cur_fdm_state->get_Lat_geocentric(),
+ cur_fdm_state->get_Altitude() *
+ SG_FEET_TO_METER );
+ pilot_view->set_sea_level_radius( cur_fdm_state->
+ get_Sea_level_radius() *
+ SG_FEET_TO_METER );
+ pilot_view->set_rph( cur_fdm_state->get_Phi(),
+ cur_fdm_state->get_Theta(),
+ cur_fdm_state->get_Psi() );
+
+ FGViewerLookAt *chase_view =
+ (FGViewerLookAt *)globals->get_viewmgr()->get_view( 1 );
+
+ sgVec3 po; // chase view pilot_offset
+ sgVec3 wup; // chase view world up
+ sgSetVec3( po, 0.0, 0.0, 100.0 );
+ sgCopyVec3( wup, pilot_view->get_world_up() );
+ sgMat4 CXFM; // chase view + pilot offset xform
+ sgMakeRotMat4( CXFM,
+ chase_view->get_view_offset() * SGD_RADIANS_TO_DEGREES -
+ cur_fdm_state->get_Psi() * SGD_RADIANS_TO_DEGREES,
+ wup );
+ sgVec3 npo; // new pilot offset after rotation
+ sgVec3 *pPO = PilotOffsetGet();
+ sgXformVec3( po, *pPO, pilot_view->get_UP() );
+ sgXformVec3( npo, po, CXFM );
+
+ chase_view->set_geod_view_pos( cur_fdm_state->get_Longitude(),
+ cur_fdm_state->get_Lat_geocentric(),
+ cur_fdm_state->get_Altitude() *
+ SG_FEET_TO_METER );
+ chase_view->set_sea_level_radius( cur_fdm_state->
+ get_Sea_level_radius() *
+ SG_FEET_TO_METER );
+ chase_view->set_pilot_offset( npo[0], npo[1], npo[2] );
+ chase_view->set_view_forward( pilot_view->get_view_pos() );
+ chase_view->set_view_up( wup );
+
+#if 0
+ sgMat4 rph;
+ sgCopyMat4( rph, pilot_view->get_VIEW() );
+ cout << "RPH Matrix = " << endl;
+ int i, j;
+ for ( i = 0; i < 4; i++ ) {
+ for ( j = 0; j < 4; j++ ) {
+ printf("%10.4f ", rph[i][j]);
+ }
+ cout << endl;
+ }
+
+ sgMat4 la;
+ sgCopyMat4( la, chase_view->get_VIEW() );
+ cout << "LookAt Matrix = " << endl;
+ for ( i = 0; i < 4; i++ ) {
+ for ( j = 0; j < 4; j++ ) {
+ printf("%10.4f ", la[i][j]);
+ }
+ cout << endl;
+ }
+#endif
+
+ // update view port
+ fgReshape( fgGetInt("/sim/startup/xsize"),
+ fgGetInt("/sim/startup/ysize") );
+
+#if 0
+ // swing and a miss
+
+ if ( ! fgPanelVisible() ) {
+ xglViewport( 0, 0 ,
+ (GLint)(fgGetInt("/sim/startup/xsize")),
+ (GLint)(fgGetInt("/sim/startup/ysize")) );