【问题标题】:Render a mayavi scene with a large pipeline faster更快地渲染具有大型管道的 mayavi 场景
【发布时间】:2013-04-28 04:13:14
【问题描述】:

我正在使用mayavi.mlab 来显示从图像中提取的 3D 数据。数据如下:

  1. 3D 相机参数为3 线在相机中心周围的x, y, x 方向,通常用于使用mlab.plot3d() 的大约20 个相机。
  2. 使用mlab.points3d() 在空间中获得大约4000 点的3D 彩色点。

对于 (1),我有一个功能可以分别为每个相机绘制每条线。如果我是正确的,所有这些行都将添加到当前场景的 mayavi 管道中。在mlab.show() 上,场景需要大约 10 秒来渲染所有这些线条。

对于 (2),我找不到一种方法一次绘制所有点,每个点都有不同的颜色,所以目前我使用 mlab.points3d(x,y,z, color = color) 进行迭代。我已经更新等待这个例程完成,因为它需要很长时间。如果我一次用相同的颜色绘制所有点,大约需要 2 秒。

在使用mlab.show() 显示场景之前,我已经尝试使用fig.scene.disable_render = True 启动我的脚本并重置fig.scene.disable_render = False

如何在合理的等待时间内使用 mayavi 显示我的数据?

【问题讨论】:

标签: python mayavi


【解决方案1】:

一般原则是 vtk 对象有很多开销,因此为了渲染性能,您希望将尽可能多的东西打包到一个对象中。当您调用 mlab 便利函数(如 points3d)时,它会创建一个新的 vtk 对象来处理该数据。因此,迭代和创建数千个单点作为 vtk 对象是一个非常糟糕的主意。

在另一个问题中暂时禁用渲染的技巧——“正确”的做法是让一个 VTK 对象包含所有不同的点。

要将不同的点设置为不同的颜色,请为 vtk 对象提供标量值。

x,y,z=np.random.random((3,100)) some_data=mlab.points3d(x,y,z,colormap='cool') some_data.mlab_source.dataset.point_data.scalars=np.random.random((100,))

仅当您可以在颜色图中充分表示所需的颜色值时,这才有效。如果您需要少量有限数量的颜色或少量有限数量的简单颜色图,这很容易,但如果您需要完全任意的颜色,则非常困难。

【讨论】:

猜你喜欢
  • 2014-07-05
  • 2014-01-07
  • 1970-01-01
  • 2022-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多