diff --git a/src/Main/viewmgr.cxx b/src/Main/viewmgr.cxx index b31b9912b..5a9b7a20f 100644 --- a/src/Main/viewmgr.cxx +++ b/src/Main/viewmgr.cxx @@ -298,9 +298,16 @@ FGViewMgr::update (double dt) // update audio listener values // set the viewer posotion in Cartesian coordinates in meters - smgr->set_position( abs_viewer_position ); - smgr->set_orientation(loop_view->getViewOrientation(), - loop_view->getViewOrientationOffset()); + SGVec3d offs = SGVec3d( loop_view->getXOffset_m(), + loop_view->getYOffset_m(), + loop_view->getZOffset_m()); + smgr->set_position_offset( offs ); + smgr->set_position_geod( loop_view->getPosition() ); + + SGQuatd orient = SGQuatd::fromYawPitchRollDeg( loop_view->getHeading_deg(), + loop_view->getPitch_deg(), + loop_view->getRoll_deg() ); + smgr->set_orientation( orient, loop_view->getViewOrientationOffset() ); // get the model velocity SGVec3f velocity = SGVec3f::zeros(); diff --git a/src/Model/acmodel.cxx b/src/Model/acmodel.cxx index 305c1fbeb..6d0d32049 100644 --- a/src/Model/acmodel.cxx +++ b/src/Model/acmodel.cxx @@ -124,17 +124,23 @@ FGAircraftModel::update (double dt) _aircraft->update(); // update model's audio sample values - _fx->set_position( _aircraft->getPosition() ); + _fx->set_position_geod( _aircraft->getPosition() ); - SGQuatd orient = SGQuatd::fromYawPitchRollDeg(_heading->getDoubleValue(), + SGQuatd orient = SGQuatd::fromYawPitchRollDeg(-_heading->getDoubleValue(), _pitch->getDoubleValue(), _roll->getDoubleValue()); _fx->set_orientation( orient ); - SGQuatf q(-0.5, -0.5, 0.5, 0.5); - _velocity = q.backTransform( SGVec3f(_speed_n->getFloatValue(), - _speed_e->getFloatValue(), - _speed_d->getFloatValue()) ); + SGVec3d vel = SGVec3d( _speed_n->getFloatValue(), + _speed_e->getFloatValue(), + _speed_d->getFloatValue() ); + if ( vel[0] || vel[1] || vel[2] ) { + SGQuatd hlOr = SGQuatd::fromLonLat( _aircraft->getPosition() ); + SGQuatd q(-0.5, -0.5, 0.5, 0.5); + _velocity = toVec3f( (hlOr*q).backTransform( vel ) ); + } + else + _velocity = SGVec3f::zeros(); _fx->set_velocity( _velocity ); }