You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Open3D将八叉树正确转换为可正常可视化的体素网格

问题原因

无参调用Octree.to_voxel_grid()不会自动从八叉树结构推导体素网格的核心配置参数(体素尺寸、空间原点坐标),返回的VoxelGrid对象内部参数为未初始化的无效值。你查询到的grid_index-2147483648是int32类型的未初始化哨兵值,对应体素位置完全落在可视坐标范围外,因此可视化窗口无任何内容。

修复方案

调用to_voxel_grid()时手动传入与当前八叉树匹配的体素尺寸、原点参数即可,参数可直接从已构建完成的八叉树属性中计算得到,无需额外手动估算。

修正后的可运行代码:

import open3d as o3d
import numpy as np

N = 2000
    
armadillo = o3d.data.ArmadilloMesh()
mesh = o3d.io.read_triangle_mesh(armadillo.path)
pcd = mesh.sample_points_poisson_disk(N)

pcd.scale(1 / np.max(pcd.get_max_bound() - pcd.get_min_bound()), center=pcd.get_center())
pcd.colors = o3d.utility.Vector3dVector(np.random.uniform(0, 1, size=(N, 3)))
    
octree = o3d.geometry.Octree(max_depth=4)
octree.convert_from_point_cloud(pcd, size_expand=0.01)

# 计算匹配八叉树配置的体素参数
voxel_size = octree.size / (2 ** octree.max_depth)
voxel_grid = octree.to_voxel_grid(voxel_size=voxel_size, origin=octree.origin)
o3d.visualization.draw_geometries([voxel_grid])

验证说明

  • 转换完成后调用voxel_grid.get_voxels()会返回正常范围内的网格索引,与八叉树覆盖的空间范围一一对应
  • 如需调整体素精细度,可修改八叉树构建时的max_depth参数:深度值越大,体素尺寸越小,生成的体素网格分辨率越高

内容的提问来源于stack exchange,提问作者Kevin Liu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 11:57:21