OpenAL监听器打破衰减

Bra*_*sch 4 audio openal lwjgl listener

为了一切的热爱,我已经呆了三个小时。

当我移动监听器时,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());
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

有人请帮助我。

Bra*_*sch 5

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

设置低于1f的滚降值似乎可以防止在设置最大距离后声音褪色。您还需要确保正确设置方向以匹配坐标系。幸运的是,我的产品已经被设计为可以与默认产品一起使用,但是请确保您可以这样做。这很重要。

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

  1. 将距离模型设置为 AL_LINEAR_DISTANCE_CLAMPED
  2. 将您的侦听器数据设置为正确的值(方向已完全设置)
  3. 确保源代码为1f
  4. 根据需要在源上设置参考距离和最大距离
  5. 。确认监听器增益不0F或者1F,只有在两者之间。但是,这不计入声音,它们可以是0f和1f。0f表示收听者的“主声音为0”,而1f表示收听者的“无衰减”。

应该是这样。

另外,在学习过程中,我看到一些关于必须对坐标进行归一化的讨论。实际上并不重要,因为OpenAL并不希望您这样做(您可以在第32页底部的文档中找到此内容)

我希望我通过澄清所有这些对别人有所帮助。互联网陌生人,祝您工作顺利。

  • 我还发现,源必须是mono。衰减不适用于立体声。 (2认同)