OpenAL监听器打破了衰减

时间:2014-01-03 21:38:32

标签: audio listener lwjgl openal

为了爱一切,我已经在这里待了三个小时。

OpenAL,当我移动监听器时,完全打破了衰减。我不明白为什么。

如果我不更改监听器设置,它可以正常工作。但不幸的是,这不是3D游戏中可行的解决方案。

我已尝试将所有声音制作组件的位置和速度标准化,以及手动设置所有衰减设置。但是,更改侦听器上的任何设置都会始终打破衰减。如果我移动听众,我会听到距离我100个单位的声音,好像它的位置没有效果。

我甚至使用alGet参数来检查值是否正确。他们是。

游戏中的每个单位都是1x1,所以在很多情况下,两个实体相距大约100个单位。

    alListener3f(AL_POSITION, pos.x, pos.y, pos.z);
    alListener3f(AL_VELOCITY, vel.x, vel.y, vel.z);
    alListener(AL_ORIENTATION, system.listener.getOrientationBuffer());
    alListenerf(AL_GAIN, system.listener.getMasterGain());

这是负责更改监听器的所有代码。根据指示,主增益为0.5f,声音本身也为0.5。距离模型为AL_LINEAR_DISTANCE_CLAMPED,参考距离为1f,最大距离为2f。然而,衰减不起作用,放置也没有区别。在LINEAR_DISTANCE_CLAMPED模式下,距离无论如何都不起作用。如果我把它作为默认模型,当我不移动监听器时,它将至少工作。

方向保留为默认(0, 0, -1f, 0, 1f, 0f)

不,我的声音驱动程序很好,这台电脑是在不到一个月前用最新的部件制造的。

是的,声音是单声道格式。

有人请帮帮我。

1 个答案:

答案 0 :(得分:4)

经过一些实验,我终于设法解决了我的问题。

设置低于1f的滚降值似乎可以在设置最大距离后保持声音淡出。您还需要确保正确设置方向以匹配您的坐标系;幸运的是,我的设计已经设计为使用默认设置,但请确保您这样做。这非常重要。

因此,为了确保衰减在参考角度和最大角度下正常工作,执行以下操作:

  1. 将距离模型设置为AL_LINEAR_DISTANCE_CLAMPED
  2. 将您的侦听器数据设置为正确的值(方向已完全设置)
  3. 确保您在源
  4. 上的滚降为1f
  5. 根据需要在源
  6. 上设置参考距离和最大距离
  7. 确定听众增益不是0f或1f,只是介于两者之间。这不算声音,它们可以是0f和1f。 0f表示“主声音为0”,1f表示听众“无衰减”。
  8. 应该是它。

    另外,在我的学习期间,我已经看到了一些关于必须标准化坐标的讨论。它实际上并不重要,因为OpenAL不希望你这样做(你可以在第32页底部的documentation找到它)

    我希望通过澄清所有这些来帮助别人。祝你自己的工作好运,网络陌生人。