Показать сообщение отдельно
Старый 27.12.2011, 23:52   #28
mr.DIMAS
Дэвелопер
 
Аватар для mr.DIMAS
 
Регистрация: 26.12.2006
Адрес: Санкт-Петербург
Сообщений: 1,572
Написано 547 полезных сообщений
(для 1,540 пользователей)
Ответ: 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 ) - это будет
__________________

(Offline)
 
Ответить с цитированием