Map texture over a mesh with Mayavi

匿名 (未验证) 提交于 2019-12-03 01:34:02

问题:

I am trying to plot Earth in 3D using python.

I made a script from what I found on the internet and using Mayavi I successfully plotted a mesh but I would like to apply a texture from an image (a blue marble from NASA).

However when I try to do so, the texture only apply on one half of the ellipsoid and si symmetrically duplicated on the other half.

Here pictures of my result: Earth 3D (imgur gallery)

And my code:

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

I would like the image to fit the ellipsoid perfectly but I did not find a way to do so.

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!