回答:
私がお勧めしている間に対してそれをやった経験以外に独自の物理エンジンをロール(ちょうどあなたが完了したら、あなたはおそらくそれを捨てるべきで実現する-それは、すべてのedgecasesを取得することは本当に難しいと数値の上限/安定性の問題を整理、既存のエンジンに貢献することで時間をより有効に活用できる可能性があります)、次のリソースをご覧ください。
プールホールレッスン:円または球間の高速で正確な衝突検出では、円/円および球/球の衝突について説明します。
Nチュートリアルの分離軸定理ベースの検出と応答の基本的な理解のために素晴らしいです。
Erin Cattoは、Box2Dの実装に関するすべてのGDC講義をオンラインで行っています。私の経験では、Box2Dには読みやすいコードもあります。
方法は次のとおりです。
すべての物理オブジェクトには次のベクトルが必要です。
したがって、直感的に、すべての物理オブジェクトに対して、フレームごとにこのようなことを行う必要がありますa
。
a.speed += a.acceleration
a.position += a.speed
落とし穴:これはオイラー法として知られています統合のます。この近似は、速度と加速度が小さく、時間ステップが小さい場合に適しています。ゲームでは、これは通常真実です。しかし、オブジェクトが薄い壁に向かって、または別の移動中のオブジェクトに向かって非常に速く移動する場合、その位置が完全に交差するのに十分な量だけ増加すると、オブジェクトとの衝突をスキップする場合があります。動きの速いオブジェクトがある場合、これを回避するには連続衝突検出が必要になる場合があります。
衝突は、この種のシーケンスで近似できます。
これは、離散点で発生するため、離散衝突検出として知られています。各ステップには注意が必要です。
以下のための二つの円:それらの中心がより離れて自分の半径の和よりもある場合だけ確認してください。
以下のための2つの長方形:チェック彼らのコーナー座標のいずれかが他の長方形内にある場合。
より複雑なポリゴンを含むものについては、別の質問のトピックであるSeparating-Axis-Theoremが必要です。
落とし穴:他にも多くの衝突タイプが考えられます。いくつかは本当に複雑です:凸ポリゴンは複数回交差する可能性があります!
衝突を解決する簡単な方法は、衝突検出から得られた値を使用して、最小侵入による変換です。これには、基本的に、可能な限り最小の移動距離でオブジェクトを離すことが含まれます。
例として、円の1つが所定の位置に固定されている円と円の衝突を考えます。最小変位ベクトルの方向は、中点ベクトル間の差と同じです。その長さは、半径の合計と中心間の距離の差です。
このアイデアは、他の形状に簡単に一般化できます。
落とし穴:両方の衝突するオブジェクトが可動である場合、それらの動きの信頼できる近似を得るために、全体の距離のある割合で両方のオブジェクトを動かす必要があります。彼らは明らかに異なる方向に移動する必要があります。
起こりがちな最も明らかなことは、1つまたは2つのオブジェクトが方向を変える、つまり速度ベクトルを回転させることです。これは非常に簡単に実装できます。
落とし穴:オブジェクトは弾力性があるかもしれませんが、そうではないかもしれません。その場合、システムの総エネルギーが減少します。空気抵抗のためにドラッグが必要になる場合があります。摩擦(特に静摩擦)は実装が複雑なことで有名ですです。
現実をシミュレートしたい場合、現実のシミュレーションは指数関数的に難しくなります。数え切れないほどのエッジケース、驚くほど難しいフォーミュラ、増え続ける研究論文の地雷原に足を踏み入れています。
ニーズが単純な場合、または学習したい場合は、試してみてください。
ニーズが複雑な場合、または数学が気に入らない場合は、物理エンジンを使用して詳細を確認してください。Box2DとBulletはゲームでかなり人気があります。
これは役立つと思います:http : //gafferongames.com/game-physics/integration-basics/
おそらく最も包括的なチュートリアル形式のリソース:
http://www.wildbunny.co.uk/blog/2011/04/06/physics-engines-for-dummies/は
:同じブログからも、これらの関連記事を参照してください
ます。http://をwww.wildbunny.co.uk/blog/2011/04/20/collision-detection-for-dummies/
http://www.wildbunny.co.uk/blog/2011/03/25/speculative-contacts-an-連続衝突エンジンアプローチパート1 /
私が今まで出会ったゲーム物理学を学ぶための最良のリソースは、「スパイパーティー」の名声のクリスヘッカーによるものです。