OpenAL 3d 定位和平移中心
Posted
技术标签:
【中文标题】OpenAL 3d 定位和平移中心【英文标题】:OpenAL 3d Positioning and Panning Center 【发布时间】:2012-10-12 08:21:29 【问题描述】:使用OpenAL,可以设置距离模型:
alDistanceModel(AL_LINEAR_DISTANCE_CLAMPED);
还有音效的位置:
float globalRefDistance = 125.0f;
float globalMaxDistance = 1250.0f;
ALfloat alPos[] = pos.x, pos.y, 0.0f;
alSourcefv(soundId, AL_POSITION, alPos);
alSourcef(soundId, AL_REFERENCE_DISTANCE, globalRefDistance);
alSourcef(soundId, AL_MAX_DISTANCE, globalMaxDistance);
这可以很好地衰减和平移声音,除非听者靠近声源并在声音的左右来回移动。在这种情况下,平移会从左向右快速移动。实际上并没有一个地方可以播放在中心平移的声音。
如何定义 OpenAL 将 3d 声音放在中心而不平移的范围/窗口/锥体?
我希望能够走到左边的声音,听到它从左声道逐渐淡入。然后在两个频道中待一会儿。然后在右声道逐渐淡出。
我尝试过将声音设置为有方向性,但似乎没有奏效:
alPos[0] = 0.0f; alPos[1] = 0.0f; alPos[2] = 1.0f;
alSourcefv(soundId, AL_DIRECTION, alPos);
alSourcef(soundId, AL_CONE_INNER_ANGLE, 180.0f);
alSourcef(soundId, AL_CONE_OUTER_ANGLE, 240.0f);
【问题讨论】:
显然这是最近的变化:opensource.creative.com/pipermail/openal/2013-July/012714.html 另见code.google.com/p/libgdx/issues/detail?id=1183 【参考方案1】:我最终没有使用 OpenAL 的 AL_POSITION,而是手动跟踪听者位置和所有声音位置,然后手动应用音量滚降并平移每个滴答声。
这允许一个特定的窗口/宽度/圆锥空间,其中一个效果完全居中平移。听起来好多了。
还请注意,我已从 AL_LINEAR_DISTANCE_CLAMPED 切换回默认的反向钳位模式。由于某种原因,线性钳位模式会导致任何以负 X 值定位的效果平移得太快,而不管参考或最大距离如何。这仅发生在 Mac 版本上,所以我认为 OpenAL Mac 实现在使用线性钳位时存在平移错误。
【讨论】:
以上是关于OpenAL 3d 定位和平移中心的主要内容,如果未能解决你的问题,请参考以下文章