我正在从 RealSense 相机捕获点云,并使用 Trimesh 库将它们转换为网格。问题是我只能从中得到一个不防水的网格。如何“完成”网格并使其防水?
I tried
trimesh.repair.broken_faces(mesh, color=[255, 0, 0, 255])
但这似乎并没有完全帮助。我尝试创建一个凸包:
并试图在两者之间进行联盟,但最终失败了:
ipdb> mesh.union(ch,engine='scad')
*** subprocess.CalledProcessError: Command '['/usr/bin/openscad', '/tmp/tmpqrdvbdd2', '-o', '/tmp/tmpvdzjmkgm.off']' returned non-zero exit status 1
ipdb> mesh.union(ch,engine='blender')
*** subprocess.CalledProcessError: Command '['/usr/bin/blender', '--background', '--python', '/tmp/tmp9_5phhhj']' returned non-zero exit status 127
而且我还会丢失源网格中的 RGB 信息。如何使用凸包完成网格,同时保留所有已知的 RGB 值?
编辑:我把针移动了一点。我查看了凸包的面部法线,并提取了所有指向侧面和下方的法线。我使用旧网格顶点和由旧面+凸包中的新面定义的面创建了一个新网格。
这让我更接近我的目标,但现在我有一堆洞,trimesh.repair.fill_holes 和 meshlab 的过滤器都没有给我带来好的结果。