物理シミュレーションに関するいくつかの情報を読み、可能な解決策を見つけました。各物理ステップを3つのフェーズに分割することで機能します。
1.事前ステップ:
物理ステップごとに、ウィンドウは4つの変換を作成し、2つは接続の両側にあります。
- オブジェクトの位置、速度(およびおそらくサイズと重量)を目的の座標系に変換する入力変換
- 力を変換してオブジェクトの元のシステムに戻す出力変換。
(静的ウィンドウはこれを一度だけ行う必要があります。)
さらに、各座標系のオブジェクトは3つのグループに分けられます。
物理グループhttp://content.wuala.com/contents/Tamschi/Stack%20Exchange/WindowGrouping.png
ウィンドウの前面にあるオブジェクト(緑)。
オブジェクトがウィンドウ平面と交差している場合、またはウィンドウの後ろから交差する可能性がある場合(図示せず)も、このグループにカウントされます。
この物理ステップ(オレンジ色)でウィンドウと交差する、またはウィンドウと交差する可能性が高いオブジェクト。
ウィンドウの後ろのオブジェクト(青)。オブジェクトがウィンドウの背面に向かって飛ぶ場合でも、グループ3のメンバーとしてマークされます。
ウィンドウがシミュレーションの境界にある場合、グループ化を簡略化できます。
2.メインステップ:
物理演算は、いくつかの例外を除いて、通常どおりに計算されます。
(オブジェクトが計算中にヒットした場合、再グループ化する必要があります!)
3.後手順:
2番目のグループのオブジェクトがウィンドウを通過した場合は、入力変換を使用して宛先システムに移動されます。
追加の考え:
物理演算後に変換が保持される場合は、変換を使用してレンダリングを高速化し、AI計算を簡単にすることができます。グループ化を使用して、レンダリングプロセスからクリップ面を削除できます。
このソリューションの欠点は、ウィンドウを物理エンジンに直接追加する必要があることです。