2015-09-04 101 views
0

在文章Advanced Octrees 2: node representations中指出:节点深度

节点的AABB可以明确地像以前一样被保存,也可以从区位内隐式存储节点的树的深度来计算码。为了从其位置代码中导出节点处的树深度,需要标志位来指示位置代码的结束。没有这样的标志,就不可能区分例如在001和000 001之间。通过使用1位来标记序列的结束1 001可以容易地与1 000 001相区分。使用这样的标志相当于将八叉树根的位置代码设置为1.

位置码是一个32位的字。也就是说,... 001... 000 001可能是相同的,因为作者说iff第一个示例后面的所有位等于第二个示例的位。

如何标记序列的末尾帮助我们找到树中节点的深度?

作者使用示例... 1 001... 1 000 001。第一个节点的深度是1还是第二个深度是2?如果是这样,我怎么知道?位置代码是一个32位的字,所以“结束标志”后面的位可以跟随为... 001 001,这也是有效的节点。

所以我真正不明白的是如何在树中存储位置代码和节点深度的32位字。

回答

1

我刚刚阅读这篇文章,并有同样的问题。我认为答案是,通过定义根节点使索引为'001',可以保证在位置代码中看到的第一个(最重要的)1位表示根。所以:

... 000 001 000 001 can be read as <root> <0,0,0> <0,0,1>, level 2 
... 000 000 001 001 can be read as <root> <0,0,1>, level 1 
... 000 000 000 001 can be read as <root>, level 0 
+0

基本上,你转移,直到你只有001或更小(例如000),直到发生这种情况的班次数是你有的级数。 – gnzlbg