我正在尝试弄清楚如何让 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);
但是右声道中有大量音频。我真的不希望增益根据距离而下降,只是按比例分配 channel 。
是否可以使用开放式 AL 模拟 2d 平移?
最佳答案
您需要将 AL_SOURCE_RELATIVE 设置为 AL_TRUE,而不是 false。
AL_SOURCE_RELATIVE set to AL_TRUE indicates that the position, velocity, cone, and direction properties of a source are to be interpreted relative to the listener position.
OpenAL 1.1 Specification 如是说(第 34 页)!
所以,改变
alSourcei(sourceID, AL_SOURCE_RELATIVE, AL_FALSE);
到
alSourcei(sourceID, AL_SOURCE_RELATIVE, AL_TRUE);
应该达到预期的结果。
关于c++ - OpenAL 2d 平移 C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20950606/