我目前正在 Python 中使用 Open3D 来体素化网格,在此过程中我遇到了一种奇怪的行为。对盒子网格体进行体素化时,生成的体素似乎仅沿着三角形的线对齐,而不是填充三角形面的整个表面积,在盒子的壁上尤其明显。
这种行为是 Open3D 体素化过程中所期望的,还是我的方法存在误解?
我尝试在盒子网格上进行体素化,期望体素网格均匀地填充网格的所有三角形,包括盒子的面。然而,在可视化时,我注意到虽然顶面和底面被充分填充,但盒子的壁主要沿着三角形边缘表现出体素化。
import open3d as o3d
import numpy as np
new_room = o3d.geometry.TriangleMesh.create_box(10,10,10)
lines = []
for triangle in np.array(new_room.triangles):
lines.extend([(triangle[0], triangle[1]), (triangle[1], triangle[2]), (triangle[2], triangle[0])])
line_set = o3d.geometry.LineSet()
vertices = np.array(new_room.vertices)
line_set.points = o3d.utility.Vector3dVector(vertices)
line_set.lines = o3d.utility.Vector2iVector(lines)
voxel_grid = o3d.geometry.VoxelGrid.create_from_triangle_mesh(new_room, voxel_size=0.5)
o3d.visualization.draw_geometries([new_room, line_set, voxel_grid])
可视化后,只有顶面和底面被充分填充,而墙壁主要沿对角线显示体素化。
我使用的是 Open3D 版本 v0.17.0。
在遇到 Open3D 体素化过程的问题后,我发现该问题已在 GitHub 上的这个线程中提出并得到解决。该问题已在 Open3D v0.18.0 版本中得到解决。
但是,当尝试使用 pip 更新包时,我遇到了困难,因为 pip 在 PyPI 上找不到所需版本的正确兼容标签。出现此问题的原因是使用 Apple Mac M1,该设备与包标签存在一些兼容性问题。
谢天谢地,我找到了记录的解决方案here:
SYSTEM_VERSION_COMPAT=0 pip install --upgrade open3d
运行此命令解决了兼容性问题,并使我能够成功地将 Open3D 更新到所需的版本。体素化现在工作正常。