1

私はフランス人ですので、英語で申し訳ありません。

現在、LWJGL で分割画面の 2D ゲームを作成しています。LWJGL で提供される openAL API を使用しています。すべてが完璧に機能しているようです。正直に言うと完璧すぎます。私は分割画面ゲームを作成していて、同じコンテキストを共有する 2 つのリスナーを持つことができないため、左/右のパンを取り除きたいと考えています。

減音はうまく機能します。一番近いプレイヤーに応じて音の位置を変えます。リスナーは変わらず、常に (0,0,0) にあります。サウンドの位置は (soundPosition - closestPlayerPosition) です。

では、どうすればサラウンドを取り除くことができますか? もちろん、距離による音の減衰を維持したいです。距離に応じてサウンドを Z 軸に配置することもできますが、これは少しばかげているように思えます (サウンドの位置を更新するたびに距離を計算する必要があります)。

ありがとう !

4

1 に答える 1

1

サウンドの位置 (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,音の距離) = (0,0,2)

編集:あなたがすでにこれを提案していることに気づきませんでした。正直なところ、これで問題ないと思います。これが、openAL の内部を書き換える以外に問題を解決する唯一の方法です。

于 2011-06-06T16:18:50.353 に答える