使用mayavi和tvkt进行纹理映射



受此示例的启发,我正试图用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

相关内容

  • 没有找到相关文章

最新更新