質問
ゲームで 2D 物理をモデル化する方法を学ぶための良い参考文献を探しています。私は ない それをやってくれるライブラリを探しています - 他人の作品を盲目的に利用するのではなく、考えて学びたいのです。
私はグーグルでかなりの量の検索を行い、GameDev などに関するチュートリアルをいくつか見つけましたが、それらのチュートリアルは理解するのが難しいと感じました。その理由は、それらのチュートリアルが不十分に書かれているか、私が理解していないレベルの数学的理解を前提としているためです。まだ持っていない。
具体的には、戦車戦闘ゲームのような、トップダウンの 2D ゲームをモデル化する方法を探しています。そして、(とりわけ) 加速と速度、「コンポーネント」の熱蓄積、コンポーネント間の衝突を正確にモデル化したいと考えています。モデルとレベル境界、ミサイル型武器。
Web サイト、推奨書籍、ブログ、コード例など、理解に役立つものであればすべて歓迎します。ゲームの構築に C# と F# を使用することを検討しているので、これらの言語のいずれかのコード サンプルがあれば便利ですが、言語のせいで適切なリンクを投稿することができないようにしないでください。=)
編集:私が数学を理解していないという意味ではありません。むしろ、関連するシステムを理解するために何を知っておく必要があるのかが分からず、それを教えるためのリソースを見つける方法が本当に分からないのです。わかりやすい方法で私に。
解決
ここに私が数年前に集めたいくつかのリソースがあります。注目すべきはVerlet統合です。 また、私がその時に見つけたいくつかのオープンソースおよび商用物理エンジンへのリンクも含めています。このテーマに関するstackoverflowの記事がここにあります: 2dゲームの物理学
物理法
- Verlet統合(Wikipedia記事)
- 高度なキャラクター物理学(すばらしい記事!動き、衝突、関節を含む、およびその他の制約。)
書籍
- <!> quot; Game Physics Engine Development <!> quot; 、Ian Millington-私はこの本を所有しており、強くお勧めします。本はC ++で物理エンジンをゼロから構築します。著者は基本的な粒子物理学から始めて、<!> quot;運動の法則<!> quot ;、制約、剛体物理学などを追加します。彼は、よく文書化されたソースコードをずっと含んでいます。
物理エンジン
- Tokamak (オープンソースの物理API)
- APE (Actionscript物理エンジン)
- FLADE (Flash Dynamics Engine)
- Fisix Engine (別のFlash Actionscriptエンジン)
- 単純な物理エンジン(商用)
他のヒント
(ソース: oreilly.com )
ゲーム開発者向け物理学 O'Reilly
経験から言えば、2D物理エンジンの実装は非常に困難です。エンジンを作成するときに行ったいくつかの手順について詳しく説明します。
-
衝突検出。 3Dワールドやネットワークシミュレーションを扱っていない場合でも、衝突検出は難しい問題になる可能性があります。 2D物理学では、軸の定理の分離を必ず使用する必要があります。 SATを実装したら、エンジンのダイナミクス部分の作成は半分完了です。
-
キネマティクス/ダイナミックス。 Chris Heckerは優れたオンラインリソースを書いており、衝突応答を段階的に説明しました。
-
その他。衝突の検出/応答が完了したら、エンジンに必要な他のすべてを実装する必要があります。これには、摩擦、接触力、ジョイント、および考えられる他のあらゆるものが含まれます。
お楽しみください!独自の物理シミュレーションを作成することは、非常にやりがいのある経験です。
これは、フラッシュを使用した2D物理の概念を示す優れたチュートリアルであり、フラッシュに特化したものではありません。 http://www.rodedev.com/tutorials/gamephysics/game_physics.swf
すべてをボトムアップで学習したい場合でも、適切にコード化され文書化されたオープンソースの物理ライブラリには、本よりもはるかに多くの情報が含まれています。状況x ...ファイル内の検索は、紙のインデックスよりも高速に処理できます。
元の応答:
何、 Box2D についての言及はありませんか?猛吹雪の従業員によるオープンソースのサイドプロジェクトであり、優れたコミュニティを持ち、うまく機能しています。
Box2Dでの(簡単な)経験で、Torque Game Builderと統合し、APIがきれいに使用でき、ドキュメントが明確で、期待したすべての物理オブジェクトをサポートしている(特にジョイントが要件でした)コミュニティは友好的で活発に見えました(2010年初頭頃)。
フォーラムのポスターから判断すると、マネージャーはソースの貢献(ライセンスの荷物を運ばなかった)を受け入れているようです。
島ベースのソルバーは非常に高速に見えました。評判から予想したとおり、主要なパフォーマンステストを行ったわけではありません。
F#には、寸法分析を行う測定単位という機能があり、間違えた場合にエラーを提供します。たとえば、次の場合:
let distance : float<meters> = gravity * 3.0<seconds>
重力は<!> lt;なので、コンパイルエラーが発生します。メートル/秒^ 2 <!> gt; <!> ltではありません。メートル<!> gt;。また、F#は単なる.NETであるため、数学/物理コードをクラスライブラリに記述し、C#から参照できます。
詳細については、次のブログ投稿をご覧ください。
これは、最初のエンジンを作成するための優れたリソースです。 3Dですが、2Dに変換するのは非常に簡単です。内部エンジンについてこのチュートリアルに従っている大企業を少なくとも1つ知っており、私は個人的に自分のエンジンについて彼の手順に従っています。彼は、スプリング/インパルスベースの物理学におけるすべての基本的な物理学の概念を説明し、独自のインターグレーターの作成方法を示します。
F#.NET ジャーナル はこれに関する 2 つの記事を公開しました。
リアルタイム有限要素材料シミュレーション (2008年6月15日)。
剛体ダイナミクス (2010年1月15日)