MCPcopy Create free account
hub / github.com/LabSound/LabSound / occlusion

Method occlusion

src/extended/SpatializationNode.cpp:43–70  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

41}
42
43float Occluders::occlusion(const FloatPoint3D & sourcePos, const FloatPoint3D & listenerPos) const
44{
45 float occlusionAttenuation = 1.0f;
46 for (const auto & i : occluders)
47 {
48 FloatPoint3D occPos(i.second.x, i.second.y, i.second.z);
49
50 float t;
51 float d = distanceFromPointToLine(occPos, listenerPos, sourcePos, t);
52
53 if (t <= 0 || t >= 1)
54 continue;
55
56 float maxAtten = i.second.maxAttenuation;
57
58 if (d <= i.second.innerRadius)
59 {
60 occlusionAttenuation *= maxAtten;
61 }
62 else if (d <= i.second.outerRadius)
63 {
64 float inner = i.second.innerRadius;
65 float t = (d - inner) / (i.second.outerRadius - inner);
66 occlusionAttenuation *= maxAtten + (1.0f - maxAtten) * t;
67 }
68 }
69 return occlusionAttenuation;
70}
71
72// @tofix - pass in HRTF loader path
73SpatializationNode::SpatializationNode(AudioContext & ac)

Callers 1

distanceConeGainMethod · 0.80

Calls 1

distanceFromPointToLineFunction · 0.85

Tested by

no test coverage detected