mayavi纹理跨越整个表面

时间:2014-06-08 14:24:01

标签: python mayavi

我想做类似的事情:3D terrain visualization with python and Mayavi2

作为输入,我有一个图像(地图),其像素的宽度和高度已定义。对于此图像/地图,我得到图像/地图所代表的表面的数字高程模型(范围)。范围包括最小/最大经度和纬度值。对于高程模型,我插入一个网格,其值与图像的像素值相同。

im # PIL Image object

pixel_x, pixel_y = im.size
ext = [lon_min, lon_max, lat_min, lat_max]

xstep = float(ext[1] - ext[0]) / float(pixel_x)
ystep = float(ext[3] - ext[2]) / float(pixel_y)     
X, Y = np.mgrid[ext[0]:ext[1]:xstep,ext[2]:ext[3]:ystep]
Z = griddata(coords, elevations, (X, Y), method='cubic', fill_value=-1)

从X,Y,Z我绘制表面

surf = mlab.surf(X,Y,Z, color=(1.0,1.0,1.0)) 

现在我想将图像覆盖在表面上:

img = image_from_array(np.array(im))
texture_img = tvtk.Texture(interpolate = 1)
texture_img.input = img

surf.actor.enable_texture = True
surf.actor.tcoord_generator_mode = 'plane'
surf.actor.actor.texture = texture_img

这给我一个结果,如Resulting file with wrong texture这里我使用了matplotlib lena版本:lena.png

在边界处重复纹理,而不是在整个表面区域上伸展(如我所愿)。我想要实现图像的任何像素都没有重复"。

我该怎么做才能防止纹理重叠"在边境?

我试图将X和Y值标准化为介于0和1之间,但这没有帮助。

0 个答案:

没有答案