simple spatializer supports directivity;

Also coming soon to an oculus spatializer near you.
This commit is contained in:
bjorn 2021-04-03 18:22:23 -06:00
parent 19620c7682
commit 609d7e05ce
1 changed files with 13 additions and 0 deletions

View File

@ -36,6 +36,19 @@ uint32_t simple_apply(Source* source, const float* input, float* output, uint32_
target[1] = .5f + (ldistance - rdistance) * 2.5f;
}
float weight, power;
lovrSourceGetDirectivity(source, &weight, &power);
if (weight > 0.f && power > 0.f) {
float sourceDirection[4];
float sourceToListener[4];
quat_getDirection(sourceOrientation, sourceDirection);
vec3_normalize(vec3_sub(vec3_init(sourceToListener, listenerPos), sourcePos));
float dot = vec3_dot(sourceToListener, sourceDirection);
float factor = powf(fabsf(1.f - weight + weight * dot), power);
target[0] *= factor;
target[1] *= factor;
}
if (lovrSourceIsEffectEnabled(source, EFFECT_ATTENUATION)) {
float distance = vec3_distance(sourcePos, listenerPos);
float attenuation = 1.f / MAX(distance, 1.f);