タグ付けされた質問 「quadtree」

1
「チャンクレベルの詳細」を分かりやすく説明する
つい最近、Unityでチャンクレベルの詳細システムを実装する意味を理解しようとしています。それぞれが高さマップを持つ4つのメッシュプレーンを生成しますが、現時点ではそれほど重要ではないと思います。このテクニックについて読んだ後、たくさんの質問があります。一度にすべてを尋ねるのが多すぎないことを願っていますが、このテクニックを理解してくれる人にとても感謝しています。 1:メッシュがチャンクに分割されることを、チャンクLODパイプラインのどのポイントで理解できない。これは最初のメッシュ生成中ですか、またはこれを行う別のアルゴリズムがあります。 2:チャンクLODデータの格納にQuadtreeデータ構造が使用されていることを理解しています。ポイントが少し欠落していると思いますが、quadtreeは各サブディビジョンレベルの頂点と三角形のデータを格納していますか? 3a:カメラ距離は通常どのように計算されますか。四分木について読むとき、軸に沿った境界ボックスが多く言及されます。この場合、各チャンクには、カメラまたはプレーヤーが近くにあることを検出するための衝突境界ボックスがありますか?またはこれを行うより良い方法はありますか?(多分レイキャスト?) 3b:チャンクはカメラ距離を自身で計算しますか? 4:各チャンクに同じ「解像度」がありますか。たとえば、最上位では、メッシュは32x32になり、各サブノードは32x32になります。以下の例:

1
クワッドツリー/グリッドベースの衝突-ロジックを実行する
まず第一に、私は自分のゲームロジックを短期間しか書いていないので、これが率直に思えるかもしれないことをおizeびします。 私は四分木とグリッドベースの衝突検出についてたくさん読んできました。私はロジックを理解しています-基本的にオブジェクトが近くにない限り、衝突をチェックしないでください。しかし、実際にこれをどのように実行するかについては言及されていません。 私は私の頭の中にいくつかの可能な方法を持っていますが、どれがベストかわからない 一般的な衝突テスト-最適化なし for(var i:int = 0; i < objects.length; i++){ //find object A var objectA = objects[i]; for(var j:int = i + 1; j < objects.length; j++){ //find object B var objectB = objects[j]; if(objectA.collidesWith(objectB){ //handle collision logic } } 近隣を保存する(方法1) しかし、衝突を最適化して近くのオブジェクトのみをチェックする場合はどうでしょう。それでもすべてのオブジェクトを実行しますか、それともチェックするオブジェクトの近くに配列を作成しますか? var objects:Array = new Array(); var …

2
完全に動的なKD-Tree対Quadtree?
私のゲームで作業しているときに、私は世界のすべてのユニットを追跡して、最近傍の戦闘をチェックできるようにする必要があります。これはRTSのようなゲームで、数千もの小さな自動化ユニットが動き回る可能性があります。 私はKD-TreesとQuadtrees(特にPoint Quadtrees)を調べてきました。私はまだそれらがどのように機能するかの詳細を学習しようとしていますが、これまでのところポイントクワッドツリーは私にとって最も理にかなっています。ただし、KD-Treeの方が検索が高速であるという印象を得ています。これは、ツリー内に持つポイントの数にとって重要です。 一方、私の場合は、常に動いている多数のユニットを追跡します。フレームごとに、それらの位置は常に異なります。四分木はKD-Treeよりも明らかに高速にリバランスしますが、ツリー内のすべてのポイントをリバランスするときにそれが当てはまるかどうかはわかりません。 この場合、ツリーのすべてのポイントのバランスを再調整するのではなく、各フレームのツリーをスクラップして最初から再構築する方がよいのではないかと思います。クワッドツリーの再バランスが速い場合、ゼロから構築する方が速いということですか?もしそうなら、それは、KD-Treeの検索速度よりもパフォーマンスにとってより重要かもしれません。ツリーを作成することの負担の大きさにもよりますが、私にはわかりません...
11 rts  quadtree  kd-tree 

1
四角形ツリーで形状(長方形)はどのように機能しますか?
クワッドツリーはゲームにとって理想的なデータ構造であると言われましたが、クワッドツリー内でシェイプがどのように機能するかを正確に理解できません。 私はこれをJavaScriptで行っていますが、これらの質問はどの言語の四分木にも当てはまると思います。 基本的な(x、y)ポイントとポイント挿入が四分木でどのように機能するか、そして紙の上でそれを実行できることはほぼ理解していると思います。 ここにあるJSfiddle私はポイントを試してのは。 1つのケースを除いて、ポイントを使用した私のテストは期待どおりに機能しています。 しかし、私の混乱は、長方形のような形状が関係しているときに始まります。形状のある四角形ツリーから取得する場合、形状の各ポイントと、それらがどのノードに分類されるかをチェックしますか?また、各図形の(x、y、width、height)パラメーターを受け入れる場合、図形の挿入はどのように機能しますか?開始点からの幅/高さを使用して他のコーナーポイントを計算してから、適切なノードに分配しますか?挿入された形状が4つのノードにまたがる場合、その形状のデータは4つのノードすべてに保存されますか? そして、検索メソッドが形状をパラメーター(x、y、width、height)として受け入れる場合、実際には何が行われているのでしょうか。挿入する場合、シェイプがどのノードにまたがるかを最初に確認してから、それらのノードのすべてのオブジェクトを取得しますか? 私はJSfiddleで形状を処理していますが、テストの結果に完全に混乱しています。重複したオブジェクトが返されます! たとえば、赤い四角は、私の検索メソッドに入力しているパラメーターに相当する描画です。この赤い四角は4つのノードすべてにまたがるので、四角ツリーのすべてのオブジェクトを返すはずだと思います。しかし、そうではなく、私はそれが何を返すかを合理化するのに苦労しています。現在コメントアウトされている他のテストがいくつかありますが、コメントを外して実行すると、さらに混乱する結果を確認できます。 とはいえ、四分木のすべてのポイントを返す場合、どうすればよいですか?境界全体のサイズの形状を使用する取得メソッド?たとえば、retrieve(0、0、canvas.width、canvas.height)? JavaScriptの四分木ライブラリ私が使用していますので、私は実際の実装が正しいと評判であると仮定し、様々な他のソースによって参照されています。 私の混乱の多くは、四分木の用語の誤解から生じていると思います。同様に、「ポイント」にも幅/高さのパラメーターがある場合、なぜ彼らは寸法ではなく境界と言うのですか?それは慣習/速記の問題ですか、それとも完全に異なる概念ですか? 御時間ありがとうございます!

3
QuadTree:ポイントまたはリージョンのみを保存しますか?
衝突検出のために動いているオブジェクトを追跡する四分木を開発しています。各オブジェクトには境界形状があり、すべてが円であるとしましょう。(2Dトップダウンゲームです) 各オブジェクトの位置のみを格納するのか、境界形状全体を格納するのかわかりません。 ポイントを操作する場合、オブジェクトが複数のノードにまたがることはないため、挿入とサブディビジョンは簡単です。一方、オブジェクトの近接クエリでは、オブジェクトの寸法が考慮されないため、衝突を見逃す可能性があります。ポイントしかない場合のクエリ領域の計算方法は? リージョンを操作する場合、複数のノードにまたがるオブジェクトをどのように処理しますか?ノードの容量を超えている場合でも、完全に含まれている最も近い親ノードに挿入する必要がありますか? ありがとう。
9 quadtree 

2
動くオブジェクトがたくさんある四分木
私がやろうとしていることに非常に役立つクアッドツリーの実装があります。私の問題は、ビューポートに多くのオブジェクトがある場合、クアッドツリーの更新に非常に長い時間がかかることです。 非静的オブジェクトの場合、クワッドツリーが遅いことは既知の事実です。高速化するためにいくつかの方法を試しましたが、実際には、多数のオブジェクトを非常に頻繁に更新する必要があります。 代わりに私が見ているより良いアルゴリズムはありますか?あなたが知っているいくつかの派生したクワッドツリー実装はありますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.