处理3D体素数据的最佳方法是什么?

1 投票
2 回答
3113 浏览
提问于 2025-04-17 05:36

目前我把体素(voxel)存储在一个简单的列表里。比如说,列表的内容是这样的:([0,0,0,0,0,1,0,0,1 ... ])

为了从这个列表中获取体素的位置,我使用了一个函数:

def getBlockKey(self, x, y, z):

    blockX = x % CFG_CHUNK_SIZE
    blockY = y % CFG_CHUNK_SIZE
    blockZ = z % CFG_CHUNK_SIZE

    return blockX + blockY * CFG_CHUNK_SIZE + blockZ * (CFG_CHUNK_SIZE * CFG_CHUNK_SIZE)

但是,当处理大量数据时,这个方法非常慢。比如说,要遍历一个256*256*256的块里的每一个立方体,就要花50秒。

我觉得用字典(dict)会更快,但它占用的内存太多了。

你能帮我找到这两者之间的折中方案吗?

2 个回答

1

如果你需要处理大量的体素(可以理解为三维像素),你可以看看梦工厂提供的一个开源库。

http://www.openvdb.org

3

你可以用一个bytearray来替代列表。假设你每个体素(voxel)只存一位信息,那么每个字节(byte)可以存储8个体素。

你也可以试试ndarray,这是来自NumPy的一个工具。你可以高效地构建一个256×256×256的数组,这样占用的空间更小,访问和操作起来比普通的Python数据结构要快(在某些方面)。

撰写回答