Ответ: Russian Sound System
Насчет учета геометрии уровня. Думаю сделать это простым "бросанием лучей". Смысл такой: проверяем пересечение луча с геометрией уровня( опять же математика ) т.е от звука к слушателю, если нашлась точка пересечения то:
1) Вычисляем расстояние от точки пересечения до слушателя. Пусть оно будет R
2) функцией setGain устанавливаем звуку усиление которое равно gain = clamp( user_gain - 1 / R ) , где user_gain усиление установленное пользователем, clamp функция обрезки по ( 0, 1 )
И так для всех звуков.
Можете посоветовать лучший закон изменения усиления?
UPD. gain = clamp( user_gain - 1 / R ) не будет работать! gain = clamp( user_gain / R ) - это будет
__________________
|