2012-03-07 17 views
0

これは一般的な知識のために興味を持ち、特定の問題には答えない問題に答える一般的な質問です。物理エンジンを作成する方法はありますか

私はオブジェクトがお互いにそして外の力で相互作用する物理的なエンジンを実装するための利用可能な方法が何であるか疑問に思っていました。例として、Angry Birds、またはTIMのようなゲームを見ることができます。空気中を「飛ぶ」物体が衝突し、互いに衝突し、重力、風、その他の「力」のような環境の潜在的な影響を受けます。

私が考えているモデルは、各オブジェクトにオブジェクト(あるクラスのオブジェクトとして)とそれに関連するスレッドがあることです。各タイムスロットでは、スレッドは小さなdtのためにスペース内のオブジェクトを「進める」ようにします。この場合、空間内の位置を取得し、環境の可能性によって適用される同等の力を与えることができる「環境」オブジェクトを持つことができます。私が正確に得ることができないのは、オブジェクトが互いに相互作用する方法です。

また、私は自分の方向で閉じていますか?これらの問題の解決策やモデルは他にありますか?私が行方不明になっていることは何ですか(私はいくつかのものを逃しているに違いありません)?

+0

動きを説明する方程式は機械物理学の対象となり、ベクトル数学を理解すれば信じられないほど簡単です。あなたが説明したことは、ゲームエンジンの仕組みの多かれ少なかれです。 「オブジェクトがどのようにやりとりするか」に関しては、あなたは[衝突検出](http://en.wikipedia.org/wiki/Collision_detection)について質問しているように思えます。この質問は「ウェブサイトはどうやって作られているのですか? - 本を書くことなく答えを出す方法は本当にありません。あるいは、その答えに有用なコンテンツがないという極端さを一般化してください。 –

+0

私が欲しいのは、一般化された答えです、私は問題の実際的な使用がないと言いました。私は物理学の仕組みや2つの物体間の衝突を検出する方法について理解しています。私は、すべての身体について衝突検出手順を実行するメカニズムと、それを管理し、操作の数を最小限にするための可能な方法が何であるかに興味があります。私は疑問の主なポイントは、大規模な身体数の環境で衝突チェック手順を最適化する方法だと思います。 – SIMEL

+1

http://ja.wikipedia.org/wiki/Collision_detection#Optimization –

答えて

2

実装は通常、説明するようなものではありません。これはあまりにも高価です。代わりに、すべてが行列変換に還元されます。ポイントは、それらを次の時間間隔に更新するマトリックスによって操作される座標のリストである。行列はそれ自体が物理学から計算されます(それはその時の力の線形解です)。

非常に大きな違いがある場合(銀河の星をシミュレートする場合など)は、もっと複雑になります。クリティカルな(例えば、速く動く、またはより正確には、強く加速する)ポイントがクリティカルでないポイントより頻繁に更新されるように、より階層的なアプローチを使用することができます。しかし、それでもメモリ内の表現は非常に抽象的で、「1つのオブジェクトごとに」というようなものはまったくありません。

関連する問題