1
0
Fork 0

move some of the sound postion and orientation calculations over to the sample class which also makes the main code nice and clean

This commit is contained in:
ehofman 2009-10-15 09:20:03 +00:00 committed by Tim Moore
parent b582c118bd
commit a9b3fc7a56
5 changed files with 22 additions and 51 deletions

View file

@ -2106,16 +2106,6 @@ MK_VIII::VoicePlayer::Speaker::bind (SGPropertyNode *node)
// uses xmlsound property names // uses xmlsound property names
tie(node, "volume", &volume); tie(node, "volume", &volume);
tie(node, "pitch", &pitch); tie(node, "pitch", &pitch);
tie(node, "position/x", &position[0]);
tie(node, "position/y", &position[1]);
tie(node, "position/z", &position[2]);
tie(node, "orientation/x", &orientation[0]);
tie(node, "orientation/y", &orientation[1]);
tie(node, "orientation/z", &orientation[2]);
tie(node, "orientation/inner-cone", &inner_cone);
tie(node, "orientation/outer-cone", &outer_cone);
tie(node, "reference-dist", &reference_dist);
tie(node, "max-dist", &max_dist);
} }
void void
@ -2127,11 +2117,6 @@ MK_VIII::VoicePlayer::Speaker::update_configuration ()
SGSoundSample *sample = (*iter).second; SGSoundSample *sample = (*iter).second;
sample->set_pitch(pitch); sample->set_pitch(pitch);
sample->set_base_position(position); // TODO: tie to listener pos
sample->set_orientation(orientation);
sample->set_audio_cone(inner_cone, outer_cone, outer_gain);
sample->set_reference_dist(reference_dist);
sample->set_max_dist(max_dist);
} }
if (player->voice) if (player->voice)

View file

@ -889,13 +889,6 @@ public:
VoicePlayer *player; VoicePlayer *player;
double pitch; double pitch;
SGVec3d position;
SGVec3f orientation;
float inner_cone;
float outer_cone;
float outer_gain;
float reference_dist;
float max_dist;
template <class T> template <class T>
inline void tie (SGPropertyNode *node, const char *name, T *ptr) inline void tie (SGPropertyNode *node, const char *name, T *ptr)
@ -920,15 +913,8 @@ public:
inline Speaker (VoicePlayer *_player) inline Speaker (VoicePlayer *_player)
: player(_player), : player(_player),
pitch(1), pitch(1),
inner_cone(360),
outer_cone(360),
outer_gain(0),
reference_dist(3),
max_dist(10),
volume(1) volume(1)
{ {
position[0] = 0; position[1] = 0; position[2] = 0;
orientation[0] = 0; orientation[1] = 0; orientation[2] = 0;
} }
void bind (SGPropertyNode *node); void bind (SGPropertyNode *node);

View file

@ -298,11 +298,11 @@ FGViewMgr::update (double dt)
// update audio listener values // update audio listener values
// set the viewer posotion in Cartesian coordinates in meters // set the viewer posotion in Cartesian coordinates in meters
smgr->set_position(-abs_viewer_position); smgr->set_position( abs_viewer_position );
smgr->set_orientation(loop_view->getViewOrientation()); smgr->set_orientation(loop_view->getViewOrientation());
// get the model velocity for the in-cockpit view // get the model velocity for the in-cockpit view
SGVec3f velocity = SGVec3f(0,0,0); SGVec3d velocity = SGVec3d(0,0,0);
if ( !stationary() ) { if ( !stationary() ) {
FGAircraftModel *aircraft = globals->get_aircraft_model(); FGAircraftModel *aircraft = globals->get_aircraft_model();
velocity = aircraft->getVelocity(); velocity = aircraft->getVelocity();

View file

@ -36,7 +36,7 @@
FGAircraftModel::FGAircraftModel () FGAircraftModel::FGAircraftModel ()
: _aircraft(0), : _aircraft(0),
_velocity(SGVec3f::zeros()), _velocity(SGVec3d::zeros()),
_fx(0), _fx(0),
_lon(0), _lon(0),
_lat(0), _lat(0),
@ -44,7 +44,9 @@ FGAircraftModel::FGAircraftModel ()
_pitch(0), _pitch(0),
_roll(0), _roll(0),
_heading(0), _heading(0),
_speed(0) _speed_n(0),
_speed_e(0),
_speed_d(0)
{ {
SGSoundMgr *smgr; SGSoundMgr *smgr;
smgr = (SGSoundMgr *)globals->get_subsystem("soundmgr"); smgr = (SGSoundMgr *)globals->get_subsystem("soundmgr");
@ -91,7 +93,9 @@ FGAircraftModel::bind ()
_pitch = fgGetNode("orientation/pitch-deg", true); _pitch = fgGetNode("orientation/pitch-deg", true);
_roll = fgGetNode("orientation/roll-deg", true); _roll = fgGetNode("orientation/roll-deg", true);
_heading = fgGetNode("orientation/heading-deg", true); _heading = fgGetNode("orientation/heading-deg", true);
_speed = fgGetNode("velocities/groundspeed-kt", true); _speed_n = fgGetNode("velocities/speed-north-fps", true);
_speed_e = fgGetNode("velocities/speed-east-fps", true);
_speed_d = fgGetNode("velocities/speed-down-fps", true);
} }
void void
@ -121,21 +125,16 @@ FGAircraftModel::update (double dt)
_aircraft->update(); _aircraft->update();
// update model's audio sample values // update model's audio sample values
// Get the Cartesian coordinates in meters _fx->set_position( _aircraft->getPosition() );
SGVec3d pos = SGVec3d::fromGeod(_aircraft->getPosition());
_fx->set_position( -pos );
SGQuatd orient_m = SGQuatd::fromLonLat(_aircraft->getPosition()); SGQuatd orient = SGQuatd::fromYawPitchRollDeg(_heading->getDoubleValue(),
orient_m *= SGQuatd::fromYawPitchRollDeg(_heading->getDoubleValue(), _pitch->getDoubleValue(),
_pitch->getDoubleValue(), _roll->getDoubleValue());
_roll->getDoubleValue()); _fx->set_orientation( orient );
SGVec3d orient = -orient_m.rotate(SGVec3d::e1());
_fx->set_orientation( toVec3f( orient ) );
// For now assume the aircraft speed is always along the longitudinal _velocity = SGVec3d( -_speed_n->getDoubleValue(),
// axis, so sideslipping is not taken into account. This should be fine -_speed_e->getDoubleValue(),
// for audio. -_speed_d->getDoubleValue());
_velocity = toVec3f(orient * _speed->getDoubleValue() * SG_KT_TO_MPS);
_fx->set_velocity( _velocity ); _fx->set_velocity( _velocity );
} }

View file

@ -39,12 +39,12 @@ public:
virtual void unbind (); virtual void unbind ();
virtual void update (double dt); virtual void update (double dt);
virtual SGModelPlacement * get3DModel() { return _aircraft; } virtual SGModelPlacement * get3DModel() { return _aircraft; }
virtual SGVec3f getVelocity() { return _velocity; } virtual SGVec3d getVelocity() { return _velocity; }
private: private:
SGModelPlacement * _aircraft; SGModelPlacement * _aircraft;
SGVec3f _velocity; SGVec3d _velocity;
FGFX * _fx; FGFX * _fx;
SGPropertyNode * _lon; SGPropertyNode * _lon;
@ -53,8 +53,9 @@ private:
SGPropertyNode * _pitch; SGPropertyNode * _pitch;
SGPropertyNode * _roll; SGPropertyNode * _roll;
SGPropertyNode * _heading; SGPropertyNode * _heading;
SGPropertyNode * _speed; SGPropertyNode * _speed_n;
SGPropertyNode * _speed_e;
SGPropertyNode * _speed_d;
}; };
#endif // __ACMODEL_HXX #endif // __ACMODEL_HXX