我正在尝试为我的太空射击游戏实现 3d 音响系统。我已经准备好了一切(在每一侧播放不同音量的声音等),但我找不到正确的公式来计算每一侧的正确音量。
总体思路是,每次玩家(舰船)击杀敌人(摄像机始终在舰船顶部)时,都会听到左右音量正确的爆炸声。所以如果敌人在船的右边,那么右边的频道会被听到更多,左边的情况也是如此。
所以我有
vector ship
vector enemie
和
playSound(left ? ,right ?)
游戏引擎是如何计算左右声道的?
最后我解决了。我使用了类似于 Ameoo 所说的东西。
这里是:
void Play3D(int id,vector3d ship,vector3d pos,float arenaWidth,float power)
{
float disright=calculate_distance(ship.x+0.2f,ship.y,pos.x,pos.y);
float disleft=calculate_distance(ship.x-0.2f,ship.y,pos.x,pos.y);
sf.Play(2,1-disleft/arenaWidth*power,1-disright/arenaWidth*power);
}