2017-09-06 3 views
0

Z軸とX軸を心配するだけで3D地形のクワッドツリーを作成していますツリーが作成されたら実際にどのようにトラバースするかということを頭の中に入れて何か問題があります。私のクワッドツリーを横切って最下位ノード(3D、C++、DX11)を取得する方法

私はツリーを作成しました。それらはQuadNodeオブジェクトとしてQuadTreeオブジェクトに保存されています。各QuadNodeはクワッドツリーの「クワッド」を表します。それは地形をとり、最下位レベルノードを見つけてノードごとに十分な量の頂点があるまで、新しいノードに細分する必要があるかどうかを判断します。

私は各ノードオブジェクトに頂点/インデックスバッファを保存しましたが、一番下のノードに到達するとポピュレートされます。だから私が取得しようとしているバッファ(描画するバッファを取得する)は、ツリーの一番下にあります。

ここでは、ルートから4つのノードしかない基本的なツリーでかなり簡単に行うことができますが、ツリーが大きくなると混乱します。ここで私はレベルが(レベル6にトラバースのように、おそらく検索を支援するために)クワッドツリーにあるどのように多くの

  • を保存

    enter image description here

    を実証するための画像である

    • 総ノード数

バッファは一番下のノードに格納されます。誰もが具体的なレベル与えられたツリーを横断する関数をどのように作成するか、それは私にそのレベルのノードを与えるかのように、例の関数または擬似コードを持っていますか?それとも良い方法がありますか?

+0

やりたいことのためにうまく動作するようです見つけました1つのレベルにおけるノードの数は、「4 = n + 4 ^(n-1)+ 4 ^(n-2)」であり、「n == 0」まで続く。したがって、レベル2では '4^2 + 4^1 + 4^0 = 21'となります。レベル3では '21 + 4^3 = 85'となります。レベル4では '85 + 4^4 = 341'となります。 –

答えて

0

それは私が探しているものではないですが、私は、これはあなたが一番下のノードにトラバースする方法であると私は

How to iterating a Quad/Oct tree

void drawQuadtreeNodes() 
{ 
    drawNode(quadtree->getRoot()); 
} 

void drawNode(QuadNode * node) 
{ 
    if (node->hasNodes) { 
     drawNode(node->nodes[0]); 
     drawNode(node->nodes[1]); 
     drawNode(node->nodes[2]); 
     drawNode(node->nodes[3]); 
    } 
    else { 
     //bottom node 
    } 
} 
関連する問題