diff options
author | Chris Robinson <[email protected]> | 2009-11-24 01:39:34 -0800 |
---|---|---|
committer | Chris Robinson <[email protected]> | 2009-11-24 01:39:34 -0800 |
commit | 35a9ccb41ff4291c7703c17538a6d6900d2968bf (patch) | |
tree | a96f310e1686c893adf6aab1710186222e573098 | |
parent | c7c2f9385f7bfde9962eb7743770679cca07181e (diff) |
Revert "Base air absorption on the distance attenuation"
This reverts commit c7c2f9385f7bfde9962eb7743770679cca07181e.
Fundamentally wrong. The -6dB rolloff is every doubling of the distance, and
the (scaled) -0.05dB rolloff is supposed to be every additional unit.
-rw-r--r-- | Alc/ALu.c | 22 |
1 files changed, 11 insertions, 11 deletions
@@ -628,20 +628,20 @@ static ALvoid CalcSourceParams(const ALCcontext *ALContext, ALsource *ALSource, } // Distance-based air absorption - if(ALSource->AirAbsorptionFactor > 0.0f) + if(ALSource->AirAbsorptionFactor > 0.0f && ALSource->DistanceModel != AL_NONE) { - ALfloat amount = AIRABSORBGAINDBHF * ALSource->AirAbsorptionFactor * - MetersPerUnit; + ALfloat dist = Distance-MinDist; ALfloat absorb; - // Convert a -6dB rolloff into a -0.05dB rolloff - absorb = pow(10.0f, log10(flAttenuation) * amount / -6.0f); - if(absorb < 1.0f) - { - DryGainHF *= absorb; - for(i = 0;i < MAX_SENDS;i++) - WetGainHF[i] *= absorb; - } + if(dist < 0.0f) dist = 0.0f; + // Absorption calculation is done in dB + absorb = (ALSource->AirAbsorptionFactor*AIRABSORBGAINDBHF) * + (dist*MetersPerUnit); + // Convert dB to linear gain before applying + absorb = pow(10.0, absorb/20.0); + DryGainHF *= absorb; + for(i = 0;i < MAX_SENDS;i++) + WetGainHF[i] *= absorb; } //3. Apply directional soundcones |