如何在游戏中模拟多普勒效果?
我正在尝试在游戏(赛车游戏)中模拟多普勒效果。我没有使用模拟声音效果的特定声音库,只有混合数据的回调函数。 我已经弄清楚了如何在混频器功能中更改采样频率。 我不知道,根据玩家和发射器的位置和速度,频率应该改变多少。 这是我在游戏中所拥有的: //player vec3 p.pos; vec3 p.vel; //emitter vec3 e.pos; vec3 e.vel; 1)根据维基百科,发射频率与观测频率之间的关系为: float f = (c + vr) / (c + vs) * fo 其中c为常数,介质(通常为大数)中的速度 vs和vr是相对于介质的源和接收器速度。 所以我猜: float vr = p.vel.length; //player speed float vs = e.vel.length; //emitter speed 但是我认为这是错误的,它不会产生任何频率变化,例如:如果vr = 0(玩家不移动)并且发射器具有恒定速度,则vr并且vs不会变化(尽管它们应该)。 也许我应该相对于发射器的速度来计算玩家的速度? 像这样 : relative_speed = …