gpt4 book ai didi

audio - OpenAL 监听器打破衰减

转载 作者:行者123 更新时间:2023-12-02 06:15:28 25 4
gpt4 key购买 nike

出于对一切的热爱,我已经这样做了三个小时。

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)

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

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

请有人帮助我。

最佳答案

经过一番尝试,我终于解决了我的问题。

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

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

  1. 将距离模型设置为 AL_LINEAR_DISTANCE_CLAMPED
  2. 将监听器数据设置为正确的值(方向已完全设置)
  3. 确保源上的滚降为 1f
  4. 根据需要在源上设置引用距离和最大距离
  5. 确保听者增益不是 0f 或 1f,而是介于两者之间。但这对于声音来说不算,它们可以是 0f 和 1f。 0f 表示“主声音为 0”,1f 表示对听者“无衰减”。

应该是这样。

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

我希望通过澄清所有这些内容可以帮助其他人。祝你们工作顺利,网络陌生人。

关于audio - OpenAL 监听器打破衰减,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20913143/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com