This is what I have so far:
import time
import open3d as o3d
x,y = np.meshgrid(100, 100)
z = np.sin(x*1)
xyz = np.zeros((np.size(x), 3))
xyz[:, 0] = np.reshape(x, -1)
xyz[:, 1] = np.reshape(y, -1)
xyz[:, 2] = np.reshape(z, -1)
vis = o3d.visualization.Visualizer()
vis.create_window()
# Convert the NumPy array to an Open3D point cloud
pcd = o3d.geometry.PointCloud()
pcd.points = o3d.utility.Vector3dVector(xyz)
normals = np.full_like(np.asarray(pcd.points),[0,0,1])
pcd.normals = o3d.utility.Vector3dVector(normals)
mesh,density = o3d.geometry.TriangleMesh.create_from_point_cloud_poisson(pcd,depth=7)
mesh.paint_uniform_color([0.5,0.5,0.5])
vis.add_geometry(mesh)
for i in range(0,1000):
z = np.sin(x* i)
xyz[:, 2] = np.reshape(z, -1)
pcd.points = o3d.utility.Vector3dVector(xyz)
mesh.vertices = pcd.points
mesh.compute_vertex_normals()
vis.update_geometry(mesh)
vis.poll_events()
vis.update_renderer()
time.sleep(.05)