用Mayavi在网格上映射纹理

时间:2017-03-24 01:18:02

标签: python python-2.7 vtk texture-mapping mayavi

我正在尝试使用python在3D中绘制地球。

我根据我在互联网上找到的内容并使用Mayavi制作了一个脚本我成功地绘制了一个网格,但我想从图像中应用纹理(a blue marble from NASA)。

然而,当我尝试这样做时,纹理仅适用于椭圆体的一半,而另一半则对称地复制。

这里的结果图片: Earth 3D (imgur gallery)

我的代码:

import numpy as np
import vtk
from mayavi import mlab

image_file = 'earth_texture.jpg';

erad    = 6371008.7714 # equatorial radius (meters)
prad    = 6371008.7714 # polar radius (meters)
erot    = 7.2921158553e-5 # earth rotation rate (radians/sec)

textureReader = vtk.vtkJPEGReader()
textureReader.SetFileName('earth_texture.jpg')
texture = vtk.vtkTexture()
texture.SetInputConnection(textureReader.GetOutputPort())

u = np.linspace(0, 2 * np.pi, 180)
v = np.linspace(0, np.pi, 180)

x = erad * np.outer(np.cos(u), np.sin(v))
y = erad * np.outer(np.sin(u), np.sin(v))
z = prad * np.outer(np.ones_like(u), np.cos(v))

mlab.figure(size=(800, 800), bgcolor=(0.16, 0.28, 0.46))

mesh = mlab.mesh(x,y,z)
mesh.actor.actor.mapper.scalar_visibility=False
mesh.actor.enable_texture = True
mesh.actor.tcoord_generator_mode = 'plane'
mesh.actor.actor.texture = texture
mlab.show()

我希望图像完全适合椭圆体,但我没有找到办法。

0 个答案:

没有答案