1

我有点困惑,因为我测试了几种算法来计算 z 索引,对于 (8, 8, 8) 我得到 3584,对于 (7, 7, 7) 我得到 511,这是正确的。问题是 8*8*8 = 512,但 z-index 是 3584。这意味着如果我使用一维数组按 z-index 存储东西,我不会使用更多空间并且会有空阵列中的插槽?类似地,7*7*7 = 343,小于 511。如果您在维基百科页面上查看 z-indexing/Morton 编码,您会发现一个二维示例,它是 8*8,x 和 y 的索引从 0到 7。但是,最大的 z-index 是 111111,即 63,从 0 开始编号时正好是第 64 个元素,因此它不会使用超过存储 64 个元素所需的空间。这里有什么问题吗?

谢谢

4

1 回答 1

1

事实证明,当你有 z-indexing 时,如果坐标在两个立方体的幂的边缘,最终索引将只等于常规索引的索引。(7,7,7) 的 z-index 为 511 的原始问题与 8*8*8 = 512 的事实一致。考虑到包含 0 的坐标,(7,7,7) 确实是 8 ^3 索引。(3,3,3) 的 z-index 可以计算如下。在二进制中,(3,3,3) 是 (011,011,011) 通过交织位,二进制中的 z-index 是 000111111。这个十进制值是 63。让我感到困惑的是 3*3*3 仅等于 27 ,我想知道为什么我需要一个大于 27 的索引,而为 3x3x3 的立方体留下一些未使用的索引。后来我发现这就是 z-indexing 的工作原理。

于 2015-12-22T00:44:56.603 回答