(try to) properly align model and viewer
This commit is contained in:
40
simgear/sound/README
Normal file
40
simgear/sound/README
Normal file
@@ -0,0 +1,40 @@
|
||||
|
||||
All code in this directory uses the OpenAL coordinate system for maximum
|
||||
useablity. The OpenAL coordinate system is equal to that of OpenGL with the
|
||||
main difference that objects behind the viewer can still be heard:
|
||||
- positive x is to the right
|
||||
- positive y is upwards
|
||||
- positive z is towards the back of the viewer/listener
|
||||
|
||||
see: http://www.falloutsoftware.com/tutorials/gl/cartesian.gif
|
||||
|
||||
All positions are in cartesian space with a unit length of one meter.
|
||||
|
||||
Velocities are three tuples indicating speed and direction in the same space
|
||||
as positions do (so they are not in the models local space).
|
||||
|
||||
|
||||
There is one SoundMgr that handles multiple SoundGroup classes.
|
||||
Each SoundGroup class handles multiple SoundSample classes.
|
||||
|
||||
A SoundSample class defines the properties of each individual sound like
|
||||
pitch, volume, position, orientation, sound cone paramters, etc. This
|
||||
class can be created all over the code but *has* to be assigned to a
|
||||
SampelGroup before you can hear it. Current sample groups are "atc",
|
||||
"avionics" and "fx" for the master airplane effects. The position of a
|
||||
SoundSample is relative to (0,0,0) of the model and hence relative to
|
||||
the base position of the SampleGroup.
|
||||
|
||||
A SampleGroup class has to be assigned to the SoundManager to be heard
|
||||
and holds data of a group of samples (maybe 'sample cloud' might be a
|
||||
good description). This class has to be created for each individual
|
||||
model that can produce one or more sounds. The SampleGroup class can be
|
||||
altered by modifying it's volume, position and orientation.
|
||||
Repositioning this class also means repositioning all it's associated
|
||||
samples. Altering it's orientation also means repositioning the absolute
|
||||
(real world) position (and orientation) of the associated sound samples.
|
||||
|
||||
The SoundMaganer can be repositioned which basically means moving the
|
||||
listener around. It's also possible to alter the listener orientation en
|
||||
velocity with this class, together with the master volume.
|
||||
|
||||
@@ -149,6 +149,7 @@ void SGSampleGroup::update( double dt ) {
|
||||
|
||||
alSourcei( source, AL_SOURCE_RELATIVE, AL_FALSE );
|
||||
alSourcei( source, AL_LOOPING, looping );
|
||||
alSourcef( source, AL_ROLLOFF_FACTOR, 1.2 )
|
||||
alSourcePlay( source );
|
||||
testForALError("sample play");
|
||||
} else {
|
||||
@@ -382,7 +383,6 @@ void SGSampleGroup::update_sample_config( SGSoundSample *sample ) {
|
||||
alSourcef( source, AL_CONE_OUTER_GAIN, sample->get_outergain() );
|
||||
testForALError("audio cone");
|
||||
|
||||
alSourcef( source, AL_ROLLOFF_FACTOR, 1.0 );
|
||||
alSourcef( source, AL_MAX_DISTANCE, sample->get_max_dist() );
|
||||
alSourcef( source, AL_REFERENCE_DISTANCE,
|
||||
sample->get_reference_dist() );
|
||||
|
||||
@@ -143,12 +143,6 @@ SGSoundSample::SGSoundSample( unsigned char *data, int len, int freq, int format
|
||||
|
||||
// destructor
|
||||
SGSoundSample::~SGSoundSample() {
|
||||
#if 0
|
||||
if (_data != NULL) {
|
||||
delete[] _data;
|
||||
_data = NULL;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void SGSoundSample::set_base_position( SGVec3d pos ) {
|
||||
|
||||
@@ -412,8 +412,8 @@ bool SGSoundMgr::load(string &samplepath, void **dbuf, int *fmt,
|
||||
*/
|
||||
void SGSoundMgr::set_orientation( SGQuatd ori )
|
||||
{
|
||||
SGVec3d sgv_up = ori.rotate(SGVec3d::e2());
|
||||
SGVec3d sgv_at = ori.rotate(SGVec3d::e3());
|
||||
SGVec3d sgv_up = ori.rotate(SGVec3d::e3());
|
||||
SGVec3d sgv_at = ori.rotate(SGVec3d::e2());
|
||||
for (int i=0; i<3; i++) {
|
||||
_listener_ori[i] = sgv_at[i];
|
||||
_listener_ori[i+3] = sgv_up[i];
|
||||
|
||||
Reference in New Issue
Block a user