【问题标题】:OpenAL listener breaks attenuationOpenAL 监听器打破衰减
【发布时间】:2014-01-03 21:38:31
【问题描述】:

出于对一切的热爱,我已经在这里待了三个小时。

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)

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

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

请有人帮帮我。

【问题讨论】:

    标签: audio listener lwjgl openal


    【解决方案1】:

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

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

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

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

    应该是这样的。

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

    我希望通过澄清所有这些来帮助其他人。祝你工作顺利,互联网陌生人。

    【讨论】:

    • 我还发现,源必须是单声道。衰减不适用于立体声。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-28
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 2013-12-24
    相关资源
    最近更新 更多