5

我在 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()

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

我没有通过谷歌或文档找到一个简单的解决方案。谢谢!

4

2 回答 2

5

尝试设置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()

在此处输入图像描述

于 2015-09-11T20:01:58.647 回答
4

除了公认的答案,我发现当我们使用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()。)

于 2017-03-11T11:09:14.100 回答