在python中的3D表面上覆盖纹理

Ada*_*ite 3 python opengl matplotlib

我的目标是将纹理(即图像)覆盖在表面上,并使用 python 将其可视化为 3D。该应用程序正在通过 DEM 查看正射影像,因此我使用 gdal 导入我的数据(图像和 DEM)。我尝试使用 matplotlib 中的 plot_surface,但似乎无法向表面添加纹理。

这是当前的代码:

from osgeo import gdal
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpec
import numpy as np

ds = gdal.Open('MyDEM.cub')
dem = ds.ReadAsArray()

do = gdal.Open('MyOrtho.cub')
or = do.ReadAsArray()

xres = gt[1]
yres = gt[5]

X = np.arange(gt[0], gt[0] + dem.shape[1]*xres, xres)
Y = np.linspace(gt[3], gt[3] + dem.shape[0]*yres, ds.RasterYSize)

X, Y = np.meshgrid(X, Y)

fig, ax = plt.subplots(figsize=(16,8), subplot_kw={'projection': '3d'})

surf = ax.plot_surface(X,Y,dem,rstride=1, cstride=1,linewidth=0, antialiased=True,cmap=plt.cm.RdYlBu_r)


fig.colorbar(surf, shrink=0.4, aspect=20)

plt.show()
Run Code Online (Sandbox Code Playgroud)

我如何使用或数组作为纹理(例如,或者可以具有与 dem 不同的分辨率/大小,但我稍后会管理它),我想首先拥有一个带有纹理的愚蠢的 3D 表面。这在 Matlab 中很容易,但是如何用 Python 做到呢?任何的想法 ?

kri*_*nab 5

是的 Mayavi 会这样做。可以在 gdal 中打开 DEM 文件,然后将图像拉入 TVTK 作为纹理。最后,您可以使用 mlab.surf() 命令将其包裹在表面上。这是一个很好的例子的链接。

例子