Отключить объемный звук с помощью openAL

Я французский, так что извините за мой английский.

В настоящее время я делаю 2D-игру с разделенным экраном с LWJGL. Я использую openAL API, который предоставляется вместе с LWJGL. Вроде все работает идеально. Ну, если честно, слишком идеально: поскольку я делаю игру с разделенным экраном и поскольку у меня не может быть двух слушателей, разделяющих один и тот же контекст, я хочу избавиться от панорамирования влево/вправо.

Звукоизоляция работает хорошо. Меняю положение звука в зависимости от ближайшего игрока. Слушатель не меняется, всегда в (0,0,0). Позиция звука (soundPosition - NearestPlayerPosition).

Итак, как мне избавиться от окружающего звука? Конечно, я хочу сохранить затухание звука на расстоянии. Я мог бы просто расположить звук по оси Z в зависимости от расстояния, но это кажется немного глупым (я должен вычислять расстояние каждый раз, когда мне нужно обновить положение звука).

Спасибо !


person Klems    schedule 06.06.2011    source источник


Ответы (1)


Когда вы вычисляете положение звука (soundPosition - NearestPlayerPosition), возьмите длину вектора, возвращаемого этим, а затем поместите этот звук прямо по оси z на расстоянии от игрока.

Пример:

soundPosition = (1.4,0,1.4) NearestPlayerPosition = (0,0,0)

soundDirection = soundPosition - NearestPlayerPosition = (1.4,0,1.4)

soundDistance = soundDirection.Length()

И, наконец, конечная позиция вашего звука:

finalSoundPosition = (0,0, soundDistance) = (0,0,2)

Редактировать: я не заметил, что вы уже предложили это. Честно говоря, я думаю, что это нормально, и это единственный способ решить вашу проблему, помимо переписывания внутренних вещей в openAL.

person deek0146    schedule 06.06.2011
comment
Я очень горжусь этим... :D - person deek0146; 06.06.2011
comment
Мне нужно вычислить расстояние, используя квадратный корень. Если я использую квадратный корень, я мог бы просто изменить усиление с помощью этого значения. Похоже на фальшивый способ использования библиотеки, которая уже делает это :/ Но хорошо, если это единственный способ решить эту проблему... Я собираюсь использовать |x1-x2|+|y1-y2| формулы, потому что я уже использую его. Спасибо ! - person Klems; 06.06.2011
comment
Однако существует разница между усилением и расстоянием - разные частоты звука затухают с разной скоростью на расстоянии. Математика намного сложнее, чем изменение коэффициента усиления. - person deek0146; 06.06.2011
comment
Мне пришлось использовать ось Y вместо оси Z, потому что ось Y направлена ​​вверх. Просто чтобы вы знали. Теперь он работает отлично! - person Klems; 07.06.2011