2014-01-06 47 views
1

我想弄清楚如何讓openAL在2D平移(通過操縱3D定位)。理想情況下,我希望實現平移,使左右聲道完全無聲地與另一個聲道完全接合。看來Open AL很好地處理了3D距離和衰減,但我很努力模擬這種2D平移。OpenAL 2d平移C++

我使用

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); 

但是有聲頻的在右聲道中的大量。我不是真的想要根據距離放棄收益,只是按比例分配渠道。

是否可以模擬開放AL的2d平移?

回答

2

您需要將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); 

應該達到預期的效果。