【问题标题】:What is the best way to handle 3d voxel data?处理 3d 体素数据的最佳方法是什么?
【发布时间】:2011-11-03 23:43:41
【问题描述】:

目前我将体素存储在一个简单的列表中。 ([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 会更快,但它使用的内存太多了。

你能帮我在这两者之间找到一个折衷方案吗?

【问题讨论】:

    标签: python performance list dictionary voxel


    【解决方案1】:

    您可以将列表替换为bytearray。假设每个体素保留一位信息,则每个字节可以存储 8 个体素。

    你也可以试试ndarray,来自NumPy。您可以高效地构造一个 256×256×256 的数组,该数组占用的空间更少,并且比普通的 Python 数据结构访问和操作更快(在某些方面)。

    【讨论】:

      【解决方案2】:

      如果您需要处理大量体素,您可能需要查看 DreamWorks 的开源库。

      http://www.openvdb.org

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-06
        • 2018-08-30
        • 1970-01-01
        • 2021-11-14
        • 1970-01-01
        相关资源
        最近更新 更多