// 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();
_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 );
}