0

在文章Advanced Octrees 2: node representations中指出:

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

位置代码是一个 32 位字。也就是说,如果第一个示例后面的所有位都等于第二个示例的位... 001,则... 000 001可能与作者所说的相同。

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

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

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

4

1 回答 1

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
于 2015-12-27T17:35:35.930 回答