1

XNA で物理演算が必要な 2D ゲームに取り組んでいます。Farseer などの物理エンジンは、その動作方法によってはうまくいかないことがわかりました。(物理学を自分で書く必要があることを最終的に理解するために、コードを 3 回書き直すという長い話です。) したがって、私が使用している参考資料によると、今必要なデータは、表面の法線だけです。衝突。

これは、スプライトを使用したピクセルごとの衝突検出を使用しています。現在、重複するすべてのピクセルとその位置の配列があります。そのデータを使用して、重なり合うピクセルの位置を平均化して、その表面の法線を計算したいと思います。これにより、不規則な形状のオブジェクトとの衝突が可能になりますが、現実的な物理的相互作用は保持されます。

このピクセル情報を使用して、表面の法線または十分に近いものを把握する方法について誰かが提案していれば、それは素晴らしいことです。

ありがとう。

4

3 に答える 3

2

それらを計算しようとする代わりに、スプライトの各ポイントの法線を保存することを検討しました (つまり、個別のテクスチャに)。このようにして、衝突が「自然」に見えるように法線を調整することができます (ゲームの意味では、物理学の観点からは正確である必要はありません)。

于 2011-05-16T17:14:44.130 に答える
1

[編集済み] - テーブル駆動のアプローチよりも Alexei のスプライト法線のアイデアの方が好きですが、それでも追加します ...

各スプライトに 2D ジオメトリをアタッチする機能だけを検討することをお勧めします。実際のポリゴン衝突を行うことができます。スプライトの衝突を判断するときは、2 つのスプライトのポリゴンを見て、それらに標準の衝突物理学を適用します。

于 2011-05-16T17:19:57.987 に答える
0

これはうまくいくかもしれません: 最悪の 2 つの問題のあるピクセル (ボディごとに 1 つ) を見つけ、それらの間に一時的なスプリングを適用してそれらを引き離します。基本的に、オーバーラップが最大のピクセル コンボ (分離の反対) があれば、オーバーラップ量に比例した力を適用します。これによりシステムにエネルギーが追加されるため、ダンパー (相対速度に比例する力) も追加することを検討してください。私がよく使う方程式は次のとおりです。

(reduced mass) = 1/( 1/(mass 1) + 1/(mass 2) )
(stiffness) = (reduced mass) * (response freq)^2
(damping) = (ratio)*(reduced mass) * (response freq)

目的の効果が得られるように量(response freq)を制御します。(ratio)応答周波数は、オーバーラップがそれ自体を修正する速さであり、「減衰比」は正の数であり、減衰応答を微調整できるように 1 より小さくても大きくてもかまいません。

于 2011-05-16T17:39:58.590 に答える