如何使用Vispy实现带JPG格式地球纹理的3D地球场景
如何使用Vispy实现带JPG格式地球纹理的3D地球场景
嘿,刚上手Vispy就想搞3D地球是吧?我之前也折腾过这个,给你一步步捋清楚怎么把你的JPG纹理贴到球体上,保证你能快速跑起来!
核心思路
其实就是两步:创建带UV坐标的球体网格 + 把你的JPG纹理映射到这个网格上,Vispy的可视化模块已经帮我们封装了大部分复杂的底层逻辑,我们只需要把这两部分串起来就行。
完整代码示例
直接上可运行的代码,你替换自己的地球JPG路径就能用:
from vispy import app, scene from vispy.io import imread from vispy.geometry import create_sphere # 1. 加载你的地球JPG纹理 # 这里替换成你自己的图片路径哦 earth_texture = imread("your_earth_image.jpg") # 2. 创建画布和3D视图 canvas = scene.SceneCanvas(keys='interactive', size=(800, 600), show=True) view = canvas.central_widget.add_view() view.camera = 'turntable' # 用转盘相机,方便旋转查看地球 view.camera.fov = 45 # 调整视角大小,让地球显示更合适 # 3. 创建带UV坐标的球体网格 # radius是地球半径,subdivisions控制球体精细度,数值越高越圆但渲染越慢 sphere_mesh = create_sphere(radius=1, subdivisions=64) # 4. 创建带纹理的网格可视化对象 earth = scene.visuals.Mesh( meshdata=sphere_mesh, texture=earth_texture, # 绑定我们加载的JPG纹理 shader='texture' # 使用纹理着色器,让纹理正确显示 ) # 5. 把地球添加到视图里 view.add(earth) # 启动应用 app.run()
关键细节解释
- 纹理加载:用
vispy.io.imread直接加载JPG就行,它会自动把图片转换成Vispy能识别的纹理格式,不用额外处理。 - 球体UV坐标:
create_sphere函数默认会生成UV纹理坐标,这是让纹理正确贴合球体的关键——你不用自己手动计算每个点的纹理位置,Vispy已经帮你做好了。 - 相机控制:用
turntable相机可以按住鼠标左键旋转地球,滚轮缩放,右键平移,完全满足查看3D地球的需求。 - 着色器选择:这里用
'texture'着色器是最基础的纹理显示方式,如果之后想加光照效果,可以换成'pbr'(基于物理的渲染),会让地球看起来更真实。
常见问题排查
- 如果纹理显示不正常(比如颠倒、拉伸),可以检查一下你的JPG图片的方向,或者在加载后手动调整纹理的翻转:
earth_texture = earth_texture[:, ::-1](左右翻转)或者earth_texture = earth_texture[::-1, :](上下翻转)。 - 如果运行报错说找不到图片,绝对路径和相对路径都试试,确保路径里没有中文或者特殊字符。
放心跑代码吧,替换好图片路径就能看到你的3D地球啦!
备注:内容来源于stack exchange,提问作者Zhug Grox
相关产品推荐
相关产品推荐

