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)
不,我的声音驱动程序很好,这台计算机是在不到一个月前用最新部件制造的。
是的,声音采用单声道格式。
有人请帮助我。
经过一些试验,我终于设法解决了我的问题。
设置低于1f的滚降值似乎可以防止在设置最大距离后声音褪色。您还需要确保正确设置方向以匹配坐标系。幸运的是,我的产品已经被设计为可以与默认产品一起使用,但是请确保您可以这样做。这很重要。
因此,要确保衰减在参考角度和最大角度下都能正常工作,请执行以下操作:
AL_LINEAR_DISTANCE_CLAMPED应该是这样。
另外,在学习过程中,我看到一些关于必须对坐标进行归一化的讨论。实际上并不重要,因为OpenAL并不希望您这样做(您可以在第32页底部的文档中找到此内容)
我希望我通过澄清所有这些对别人有所帮助。互联网陌生人,祝您工作顺利。