物理シミュレーションと異なる座標系との接続


9

オブジェクトが「ウィンドウ」を介して2つの物理シミュレーションの間を移動し、ウィンドウプレーンと交差する場合に両方のシミュレーションのオブジェクトと衝突するようにします。

シミュレーションの座標系は同じ原点を持たず、向きが異なる場合があります。シミュレーションをそれ自体にラップする必要はありませんが、プラスになります。

個々のオブジェクトを複製せずにシステムを効率的に接続するにはどうすればよいですか?

編集:

計算は可能な限り正確でなければならないので、オブジェクトが反対側から同時にウィンドウを横切ってもオブジェクトが動かなくなることはありません。


最初の質問は、物理シミュレーションはウィンドウ全体で正確であることですか?方向の変更により、適切なスイープがかなり不可能になるためです。これは、規模を変えるポータルのようなものです。2番目の質問:任意の方向、または少なくとも90度の角度など、方向が異なる場合、軸を交換するだけですか?
Kaj

これは、ポータルで対処する必要がある問題のように思えます。私が正しく覚えているなら、彼らはこれらの問題に言及し、ゲーム内の解説でそれらをどのように解決したかを述べています。あなたはおそらくどこかでこれらをオンラインで見つけることができます。
Nailer

@Kaj任意の直角遷移の計算パスを分割するのが最善だと思います。このように、直角の方がより高い精度と速度を持つことができますが、他の角度も可能です。
Tamschi

@Nailer私が正しく覚えている場合、ポータルが開いている間に新しい物理環境が作成され、この追加のシミュレーションに近づいたすべての物理オブジェクトが複製されました。彼らは何らかの形でオブジェクトを制約したと言いましたが、おそらくフォースを変換し、各物理ステップを配置しているだけです。ソースでシミュレート。
Tamschi

回答:


2

以前は 'Portalized'と呼ばれていた、Pseudoformと呼ばれるこのクールなプロジェクトがあり、これは、ポータルを使用して物理シミュレーションをグルービー形式で処理します。

シュードフォーム

見てみな!

特にビデオ-それは驚異的にクールです。

それはオープンソースなので、彼らがどうやってそれをやっているか見ることができます。

きっとあなたが望んでいることでしょう。:)


2
私はコードを読んだだけです。その方法は、Valveのソリューションとほとんど同じですが、追加の物理環境がありません。ポータル化されたエンジンのポータルは、オブジェクトがポータルの表面に触れるとオブジェクトの複製を作成し、一定期間ポータルを離れるとオブジェクトを削除します。この回答は、まだいくらか役立ちます。重複を制限するために使用されるジョイントは、オブジェクトがポータルでどのように変換されるかを示しています。
Tamschi

0

わかりました-これが機能するかどうかはわかりません。
上記の情報に基づいて、「ウィンドウ」にトリガーを配置して、オブジェクトが世界から出て行く時期を検出できるようにします。衝突時の現在の速度ベクトルを取得します。トリガーが当たった場所と、このフレームが終了した場所に基づいて、残りのタイムステップを計算します(世界外では、これを可能にするために仮想境界が必要になります)。この時点で、速度と残りのタイムステップがわかっているので、入力しようとしている世界の境界に再配置して、速度を再投影できます。ただし、これには1つのフレームで2つの物理演算の更新が必要であり、同じ位置で別のオブジェクトがbからaに移動するときに、aからbに移動するオブジェクトの境界線があり、衝突はまったく検出されません。
ちょっと大ざっぱ、


これは可能な限り最速の方法のようですが、2つのオブジェクトが同じ側からウィンドウを横切ると問題が発生します。最初のオブジェクトが境界を越えて途中で動かなくなった場合、2番目のオブジェクトは境界に達するまで衝突しません。また、目的地の最初の内部に表示されます。
Tamschi

入力中に少し編集しましたが、それは確かに私が追加した問題です:o \
Kaj

私は読むことを学ぶ必要があります。私の追加は別の国境事件でした。熟考します。
Kaj

いいえ、国境は世界の外にあります。したがって、オブジェクト1は、オブジェクトbと同じように、独自の速度で(ウィンドウ2の位置ではなく、ワールド2の境界から)ワールド2にショットされます。彼らは境界2の世界2で適切に衝突します。しかし、私自身の国境事件はまだ成立しています。
Kaj

私は仮想境界についての部分を誤って読んだようです。とにかく、オブジェクトが動かなくなった場合、別の問題があります。宛先ウィンドウの裏側の部分は元の位置にレンダリングされますが、境界線に触れていないオブジェクトは衝突しません。これらの問題を解決する1つの方法は、シミュレーションを統合することですが、これを効率的に行う方法はわかりません。
Tamschi、2011

0

物理シミュレーションに関するいくつかの情報を読み、可能な解決策を見つけました。各物理ステップを3つのフェーズに分割することで機能します。

1.事前ステップ:

物理ステップごとに、ウィンドウは4つの変換を作成し、2つは接続の両側にあります。

  • オブジェクトの位置、速度(およびおそらくサイズと重量)を目的の座標系に変換する入力変換
  • 力を変換してオブジェクトの元のシステムに戻す出力変換。

(静的ウィンドウはこれを一度だけ行う必要があります。)

さらに、各座標系のオブジェクトは3つのグループに分けられます。

物理グループhttp://content.wuala.com/contents/Tamschi/Stack%20Exchange/WindowGrouping.png

  1. ウィンドウの前面にあるオブジェクト(緑)。
    オブジェクトがウィンドウ平面と交差している場合、またはウィンドウの後ろから交差する可能性がある場合(図示せず)も、このグループにカウントされます。

  2. この物理ステップ(オレンジ色)でウィンドウと交差する、またはウィンドウと交差する可能性が高いオブジェクト。

  3. ウィンドウの後ろのオブジェクト(青)。オブジェクトがウィンドウの背面に向かって飛ぶ場合でも、グループ3のメンバーとしてマークされます。

ウィンドウがシミュレーションの境界にある場合、グループ化を簡略化できます。

2.メインステップ:

物理演算は、いくつかの例外を除いて、通常どおりに計算されます。

  • 2番目のグループのオブジェクトが3番目のグループのオブジェクトと衝突することはありません。逆も同様です。

  • ウィンドウの入力変換は2番目のグループのオブジェクトで使用され、結果は宛先システムの前面および交差するオブジェクトに対して評価されます。結果として生じる力は、出力変換を使用して変換され、元のオブジェクトに適用されます。

(オブジェクトが計算中にヒットした場合、再グループ化する必要があります!)

3.後手順:

2番目のグループのオブジェクトがウィンドウを通過した場合は、入力変換を使用して宛先システムに移動されます。

追加の考え:

物理演算後に変換が保持される場合は、変換を使用してレンダリングを高速化し、AI計算を簡単にすることができます。グループ化を使用して、レンダリングプロセスからクリップ面を削除できます。

このソリューションの欠点は、ウィンドウを物理エンジンに直接追加する必要があることです。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.