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 定位和平移中心的主要内容,如果未能解决你的问题,请参考以下文章

用于在 Unity3D 中定位 3D 对象的 OpenCV 旋转(Rodrigues)和平移向量

动画相机以定位和设置谷歌地图中的平移

WPF 画一个3D矩形并旋转

OpenGL 链式平移/旋转

WPF 3D 平移模型+动画(桥梁检测系统)

带有中心裁剪的 Keras ImageDataGenerator 用于旋转和平移移位