【发布时间】: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