open3d.visualization
模块中的 draw_geometries_with_animation_callback
函数允许用户对场景进行一系列交互和动画。当该函数被调用时,用户界面将打开,并显示场景中的几何体。随后,用户可以使用鼠标和键盘交互,并在场景中添加动画。
draw_geometries_with_animation_callback
函数接受以下参数:
geometries
:表示要显示的几何体的列表。需要注意的是,这些几何体必须属于同一坐标系。callback
: 带有回调函数的函数名称,该回调函数将在场景中的每个帧中多次调用,由此让用户实现动画。window_name
:可选的字符串参数,表示场景窗口的名称。当省略该参数时,默认为 “Open3D”。width
:可选的整数参数,表示场景窗口的宽度。当省略该参数时,默认为 1920。height
:可选的整数参数,表示场景窗口的高度。当省略该参数时,默认为 1080。left
:可选的整数参数,表示场景窗口左上角的 x 坐标。当省略该参数时,默认为 50。top
:可选的整数参数,表示场景窗口左上角的 y 坐标。当省略该参数时,默认为 50。point_show_normal
:可选的布尔参数,表示是否显示点云的法线向量。当省略该参数时,默认为 False。mesh_show_wireframe
:可选的布尔参数,表示是否为网格渲染模式。当省略该参数时,默认为 False。mesh_show_back_face
:可选的布尔参数,表示是否显示网格的反面。当省略该参数时,默认为 False。draw_geometries_with_animation_callback
函数的第二个参数是回调函数,该函数将在场景中的每个帧中再次执行。当回调函数被调用时,它将接受以下参数:
vis
:表示场景对象的可视化。geometry_list
:表示场景中包含的每个几何体的列表。repeat_every_n_frames
:表示回调函数在场景中每个 n 帧调用一次。param
:表示传递给函数的可选参数。回调函数应该修改场景中的几何图形对象以达到动画的效果。例如,您可以通过修改点云的位置来创建漂移效果。由于回调函数在主循环中以及其他无限循环中运行,因此应该避免在里面进行重度计算。
以下是使用 draw_geometries_with_animation_callback
函数的示例。该例子显示了一个点云,并且在每帧中将其沿 X 轴平移 0.01。
import open3d.visualization as vis
import open3d.geometry as geom
import numpy as np
def animate(vis, geometry_list):
pcd = geometry_list[0] # 取回点云几何对象
points = np.asarray(pcd.points) # 取回点云的坐标
points[:,0] += 0.01 # 平移点云在x轴上
pcd.points = geom.Vector3dVector(points) # 更新点云在3d场景中
vis.update_geometry(pcd) # 刷新可视化
pcd = geom.PointCloud() # 创建空点云对象
pcd.points = geom.Vector3dVector(np.random.randn(100, 3)) # 为其中添加一些点
vis.draw_geometries_with_animation_callback([pcd], animate) # 显示点云并且移动