OpenAL 2d 平移 C++

Posted

技术标签:

【中文标题】OpenAL 2d 平移 C++【英文标题】:OpenAL 2d panning C++ 【发布时间】:2014-01-06 13:00:23 【问题描述】:

我试图弄清楚如何让 openAL 平移 2D(通过操纵 3D 定位)。理想情况下,我希望实现平移,以便左声道或右声道可以与另一个完全静音的声道完全接合。 Open AL 似乎可以很好地处理 3d 距离和衰减,但我正在努力模拟这种 2D 平移。

我正在使用

alDistanceModel(AL_LINEAR_DISTANCE_CLAMPED)

float sourcePosition[3] = 0.99f,0.f,0.f;
alSourcefv(sourceID, AL_POSITION, sourcePosition);
alSourcei(sourceID, AL_SOURCE_RELATIVE, AL_FALSE);
alSourcef(sourceID, AL_MAX_DISTANCE, 1.f);
alSourcef(sourceID, AL_REFERENCE_DISTANCE, 0.5f);

但是,右声道中有大量音频。我真的不希望增益基于距离而下降,只是按比例分配通道。

是否可以用 open AL 模拟 2d 平移?

【问题讨论】:

【参考方案1】:

您需要将 AL_SOURCE_RELATIVE 设置为 AL_TRUE,而不是 false。

AL_SOURCE_RELATIVE 设置为 AL_TRUE 表示位置, 源的速度、锥体和方向属性是 相对于听者位置进行解释。

OpenAL 1.1 Specification 这么说(第 34 页)!

所以,改变

alSourcei(sourceID, AL_SOURCE_RELATIVE, AL_FALSE);

alSourcei(sourceID, AL_SOURCE_RELATIVE, AL_TRUE);

应该会达到预期的效果。

【讨论】:

以上是关于OpenAL 2d 平移 C++的主要内容,如果未能解决你的问题,请参考以下文章

用java怎样编写一个二维坐标平移程序

使用 OpenGL 固定功能旋转和平移 2D 图像

在 GLM 中旋转、缩放和平移 2d 点

canvas 平移&缩放

OpenGL矩阵乘法C++

Stone教程:如何选中平移旋转和缩放实体