在 mlab/mayavi/python 中设置平行预期

Setting parallel prospective in mlab/mayavi/python

我在 python 中有一段代码可以在 python 中渲染一些球体,如下所示:

%matplotlib inline
import numpy as np
import matplotlib.pyplot as plt
import random
import mayavi
from mayavi import mlab

N = 4;
diams = .4*np.ones([N]);
xvals = np.arange(N);
yvals = np.zeros(N);
zvals = np.zeros(N);
pts = mlab.points3d(xvals, yvals, zvals, diams, scale_factor=1,transparent=True)

mlab.show()

图形的默认视图会根据相机位置添加失真(球体越远越小)。我想通过一些命令将投影设置为平行投影(更远的球体大小相同),以便它自动呈现这样。

我没有找到 google 或文档的直接解决方案。谢谢!

根据您的情况尝试设置 fig.scene.parallel_projection = Truemlab.gcf().scene.parallel_projection = True

作为一个简单的例子,比较(放大以放大差异):

import numpy as np
from mayavi import mlab

np.random.seed(1977)
x, y, z = np.random.random((3, 10))

mlab.points3d(x, y, z)
mlab.show()

当我们设置正交投影时:

import numpy as np
from mayavi import mlab

np.random.seed(1977)
x, y, z = np.random.random((3, 10))

mlab.points3d(x, y, z)
mlab.gcf().scene.parallel_projection = True
mlab.show()

除了接受的答案,我发现当我们使用figure.scene.parallel_projection = True模式时,mlab.view()返回的参数已经不足以完全描述相机视图。还有另一个参数起作用:

figure.scene.camera.parallel_scale

因此,如果希望每次都将视图设置为相同,则必须 (1) 设置 mlab.view(..) 以及 (2) 例如设置 figure.scene.camera.parallel_scale = 5.0


(背景故事:我的脚本绘制了一个表面,然后我只使用 mlab.view(..) 设置了相机,发现渲染图像缩放比例不一致。原因是:当我绘制时,TVTK 更新了相机的参数,因此如果绘图不相同,它们可能会有所不同。这些参数包括 parallel_scale,它会影响投影 — 它基本上是缩放 — 但独立于 mlab.view()。)