2016-12-11 4 views
0

私はすべての静的衝突オブジェクトにクアッドツリーを設定しました。衝突検出とレイキャスティングの両方に役立ちます通常と4分木ベースの衝突検出を混在させるには?

しかし、静的ではない衝突オブジェクトもありますので、レイの可能な衝突可能オブジェクト

これを達成するには(パフォーマンスに関して)どのような方法がありますか?私の現在の考え方は以下のとおりです。

1)は、その後、レイキャスト

2)その基本的にいくつかのフラグと、現在の四分木に非静的オブジェクトを追加するためにそれを使用して、非静的オブジェクトを追加し、四分木のクローンを作成しますクワッドツリーで許可されているよりも多くの子供がいる場合でもクワッドツリーがクワッドを分割しないようにします。レイアップキャストが完了したら、クアッドツリーはそれ自身の後で "クリーンアップ"する必要があります。

3)最も静的なオブジェクト衝突(4分木を使用)を決定した後、すべての非静的オブジェクトを繰り返して、衝突ポイントが最も近い静的オブジェクトの衝突ポイントよりも近いかどうかを確認してください。

これらのアイデアは少し面倒です。

私はJavaを使用しています。

答えて

0

1)クローニングあなたが10個以上のオブジェクトを持っているなら、クアッドツリーはおそらく非常に高価なので、私はそれをしません。

2)なぜ非静的オブジェクトのリストを保持しないのですか?ツリーにすべてのオブジェクトを追加するだけで(なぜ分割が問題なのか分かりません)、計算が完了した後、それらをツリーから削除します。

at 3)静的でないオブジェクトが多い場合は非常に高価ですが、ごくわずかの場合はおそらく最も安い解決策です。

いくつかのより多くのアイデア:

4)非静的オブジェクトのための二分木を構築し、5と同様の衝突検出を()ください)。衝突後、単に2番目のツリーを破棄します。

5)分割ノードが実際に問題がある場合、PH-Treeを使用するとどうなりますか?クワッドツリーのようなものですが、4分木よりも静的に動作します(挿入/削除によって、1つ以上のノードが変更されることはありません)。

6)静的なオブジェクトは、あなたは '動くオブジェクトツリー'を使用することができます(ちょうどそれのためのGoogle、いくつかの専用構造があります)。 オブジェクトの速度が速すぎない場合は、PH-Treeが再び適切な選択肢になることがあります。専用の移動/更新メソッドがあります。