2017-09-06 28 views
0

我正在爲我的三維地形創建四叉樹,因爲我只需要擔心Z軸和X軸,而我在創建樹後,如何真正地遍歷下來會遇到一些麻煩。如何遍歷我的四叉樹以獲得最底層的節點(3D,C++,DX11)

我創建了樹,它們作爲QuadNode對象存儲在我的QuadTree對象中。每個QuadNode表示四叉樹的「Quad」。它需要地形並計算出是否需要細分爲新節點,直到找到最底層的節點並且每個節點有足夠數量的頂點。

我已經在每個節點對象中存儲了一個頂點/索引緩衝區,但是隻有當它們到達最底層節點時,它們纔會被填充。所以我試圖獲得的緩衝區(讓緩衝區繪製)正好在樹的底部。

現在我可以很簡單地用一個基本樹來完成這個工作,它只有4個節點,但隨着樹變大,我感到困惑。這裏是展示

enter image description here

我存儲

  • 多少級都在四叉樹(與搜索可能的幫助,像橫向到6級)的圖像
    • 的總節點數

緩衝區存儲在最底部的節點中。有沒有人有一個例子函數或僞代碼,我將如何使一個函數遍歷樹給定一個特定的級別,它會給我這個級別的節點?還是有更好的方法?

+0

工作在一個級別上的節點數量將是'4^n + 4 ^(n-1)+ 4 ^(n-2)'等等,直到n == 0。所以在第二級,你會有'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 
    } 
}