Open3d中的非阻塞可视化

问题描述

我有2个不同的点云存储在2个不同的numpy数组中,我可以将它们可视化在open3d中组合。但是我想做的是,一个点云保持不变,而另一个点云在z方向上移动(即更新numpy数组的坐标)而不关闭窗口。

下面是我传递这两个numpy数组(npa和npa_test)以在open3d中可视化的代码。请注意,在最初的几行中,我将numpy数组存储到.pcd文件(因为它们是从open3d无法识别的不同类型的文件.asc中提取的),然后使用open3d读取功能读取它们。我想通过沿z方向移动一个pointcloud几何体,然后在同一窗口上可视化它而不关闭它来更新它。可以通过在for循环中将z坐标更新1来完成,如下所述。如果您对此有解决方案,请告诉我。谢谢。

def抽奖(npa,npa_test):

pcd = o3d.geometry.PointCloud()
pcd.points = o3d.utility.Vector3dVector(npa)
o3d.io.write_point_cloud("C:/Users/Junaid/Desktop/test.ply",pcd)
pcd_load = o3d.io.read_point_cloud("C:/Users/Junaid/Desktop/test.ply")

pcd1 = o3d.geometry.PointCloud()
pcd1.points = o3d.utility.Vector3dVector(npa_test)
o3d.io.write_point_cloud("C:/Users/Junaid/Desktop/test1.ply",pcd1)
pcd_load1 = o3d.io.read_point_cloud("C:/Users/Junaid/Desktop/test1.ply")

o3d.utility.set_verbosity_level(o3d.utility.VerbosityLevel.Debug)

vis = o3d.visualization.Visualizer()
vis.create_window()
vis.add_geometry(pcd_load)
vis.add_geometry(pcd_load1)

npa.tolist()

for i in range(len(npa)):

    npa[i][2] = npa[i][2] + 1

    npa=np.asarray(npa,dtype=np.float32)
    pcd = o3d.geometry.PointCloud()
    pcd.points = o3d.utility.Vector3dVector(npa)
    o3d.io.write_point_cloud("C:/Users/Junaid/Desktop/test.ply",pcd)
    pcd_load = o3d.io.read_point_cloud("C:/Users/Junaid/Desktop/test.ply")

    vis.update_geometry(pcd_load)

    vis.poll_events()
    vis.update_renderer()
vis.destroy_window()

解决方法

我看到您正在使用ID来修改该值,当您仅使用Transformation Matrix来变换NA之类的几何图形时,这是过大的。

使用open3d轻松地将球体从z = 0.5移至15.0,增量为0.005,这很容易。

npa[i][2] = npa[i][2] + 1