在文章Advanced Octrees 2: node representations中说明:
节点的AABB可以像以前一样显式存储,也可以从隐式存储在位置代码中的节点树深度计算出来。为了从其位置代码导出节点处的树深度,需要标志位来指示位置代码的结束。没有这样的标志,就不可能区分例如通过使用1位来标记序列的末尾,可以很容易地将1 001与1 00 001区分开来。使用这样的标志相当于将八叉树根的位置代码设置为1。
位置代码是32位字。也就是说,FileJobManager
和... 001
可能相同,因为作者说 iff 第一个示例后面的所有位都等于第二个示例的位。
如何标记序列的结尾有助于我们找到树中节点的深度?
作者使用示例... 000 001
和... 1 001
。第一个节点的深度是1,第二个深度是2吗?如果是这样,我怎么知道?位置代码是一个32位字,因此“结束标志”后面的位可以跟随... 1 000 001
,它也是有效节点。
所以我真正不明白的是如何在32位字中存储位置代码和树中节点的深度。
答案 0 :(得分: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