2017-09-06 29 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 
    } 
}