1
0
Fork 0
mirror of https://github.com/bjornbytes/lovr.git synced 2024-07-02 12:33:52 +00:00

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

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; 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)) { if (lovrSourceIsEffectEnabled(source, EFFECT_ATTENUATION)) {
float distance = vec3_distance(sourcePos, listenerPos); float distance = vec3_distance(sourcePos, listenerPos);
float attenuation = 1.f / MAX(distance, 1.f); float attenuation = 1.f / MAX(distance, 1.f);