mirror of https://github.com/AxioDL/amuse.git
More accurate attenuation curve
This commit is contained in:
parent
885a2d2154
commit
b4c073c373
|
@ -45,6 +45,7 @@ class Emitter : public Entity
|
||||||
float m_falloff;
|
float m_falloff;
|
||||||
bool m_doppler;
|
bool m_doppler;
|
||||||
bool m_dirty = true;
|
bool m_dirty = true;
|
||||||
|
Voice::VolumeCache m_attCache;
|
||||||
|
|
||||||
friend class Engine;
|
friend class Engine;
|
||||||
void _destroy();
|
void _destroy();
|
||||||
|
|
|
@ -33,21 +33,14 @@ float Emitter::_attenuationCurve(float dist) const
|
||||||
if (dist > m_maxDist)
|
if (dist > m_maxDist)
|
||||||
return 0.f;
|
return 0.f;
|
||||||
float t = dist / m_maxDist;
|
float t = dist / m_maxDist;
|
||||||
if (m_falloff < 0.f)
|
if (m_falloff >= 0.f)
|
||||||
{
|
{
|
||||||
float tmp = t * 10.f + 1.f;
|
return 1.f - (m_falloff * t * t + (1.f - m_falloff) * t);
|
||||||
tmp = 1.f / (tmp * tmp);
|
|
||||||
return (1.f + m_falloff) * (-t + 1.f) + -m_falloff * tmp;
|
|
||||||
}
|
|
||||||
else if (m_falloff > 0.f)
|
|
||||||
{
|
|
||||||
float tmp = (t - 1.f) * 10.f - 1.f;
|
|
||||||
tmp = -1.f / (tmp * tmp) + 1.f;
|
|
||||||
return (1.f - m_falloff) * (-t + 1.f) + m_falloff * tmp;
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return -t + 1.f;
|
float omt = 1.f - t;
|
||||||
|
return 1.f - ((1.f + m_falloff) * t - (1.f - omt * omt) * m_falloff);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -86,10 +79,10 @@ void Emitter::_update()
|
||||||
|
|
||||||
/* Calculate attenuation */
|
/* Calculate attenuation */
|
||||||
float att = _attenuationCurve(dist);
|
float att = _attenuationCurve(dist);
|
||||||
|
att = (m_maxVol - m_minVol) * att + m_minVol;
|
||||||
|
att = m_attCache.getVolume(att, false);
|
||||||
if (att > FLT_EPSILON)
|
if (att > FLT_EPSILON)
|
||||||
{
|
{
|
||||||
att = (1.f - att) * m_minVol + att * m_maxVol;
|
|
||||||
|
|
||||||
/* Apply pan law */
|
/* Apply pan law */
|
||||||
float thisCoefs[8] = {};
|
float thisCoefs[8] = {};
|
||||||
m_vox->_panLaw(thisCoefs, frontPan, backPan, span);
|
m_vox->_panLaw(thisCoefs, frontPan, backPan, span);
|
||||||
|
|
Loading…
Reference in New Issue