受此示例的启发,我正试图用python将一个常见的jpg图像覆盖在Mayavi表面上。这是简化的代码:
from mayavi import mlab
from tvtk.api import tvtk
import numpy as np
data=np.random.random((200,200)) #The shape of the matrix fits the image size in the original code
img = tvtk.JPEGReader()
img.file_name="img.jpg"
texture=tvtk.Texture(interpolate=0)
texture.set_input_data(bmp1.get_output())
mlab.figure(size=(300,300))
surf = mlab.surf(data,color=(1,1,1))
surf.actor.enable_texture = True
surf.actor.tcoord_generator_mode = 'plane'
surf.actor.actor.texture = texture
然而,我得到了:
ERROR: In /tmp/vtk20150328-28275-1clyhqa/VTK-6.2.0/Rendering/OpenGL/vtkOpenGLTexture.cxx, line 200
vtkOpenGLTexture (0x7fa9c32fb590): No scalar values found for texture input!
该错误与将纹理指定给演员有关。有什么想法吗?提前谢谢。
MayaVI-API中有一个补丁,请参见此处:https://github.com/enthought/mayavi/issues/211
您必须更换:
texture=tvtk.Texture(interpolate=0)
texture.set_input_data(bmp1.get_output())
带有:
texture = tvtk.Texture(input_connection=img.output_port, interpolate=0)
那么它应该会起作用。请注意,您编写的是bmp1
而不是img
。