Когда вы вычисляете положение звука (soundPosition - closestPlayerPosition), берете длину вектора, возвращаемого этим, а затем помещаете этот звук прямо по оси z, на расстоянии от проигрывателя.
Пример:
soundPosition = (1.4,0,1.4) closestPlayerPosition = (0,0,0)
soundDirection = soundPosition - closestPlayerPosition = (1.4,0,1.4)
soundDistance = soundDirection.Length ()
И, наконец, конечная позиция вашего звука:
finalSoundPosition = (0,0, soundDistance) = (0,0,2)
РедактироватьЯ не заметил, что вы уже предложили это.Честно говоря, я думаю, что это нормально, и это единственный способ решить вашу проблему, кроме переписывания содержимого внутри openAL