Manim v0.18.0中TexturedSurface未定义错误解决咨询
解决Manim v0.18.0中创建带纹理3D地球模型的报错问题
问题根源
Manim v0.18.0已移除旧版本中的TexturedMobject和TexturedSurface类,相关纹理渲染功能已整合到基础3D几何体的初始化参数中,这就是你找不到纹理相关文档、运行时出现name 'TexturedSurface' is not defined错误的原因。
正确实现代码
直接通过Sphere类的texture参数传入纹理资源(支持网络URL或本地文件路径),结合ThreeDScene实现3D场景展示:
from manim import * class TexturedEarth(ThreeDScene): def construct(self): # 地球纹理资源(可替换为本地图片路径) earth_texture = "https://upload.wikimedia.org/wikipedia/commons/thumb/4/4d/Whole_world_-_land_and_oceans.jpg/1280px-Whole_world_-_land_and_oceans.jpg" # 创建带纹理的球体 earth = Sphere(radius=3, texture=earth_texture) self.add(earth) # 调整3D相机视角,确保地球可见 self.set_camera_orientation(phi=75 * DEGREES, theta=-45 * DEGREES) # 可选:添加自动旋转效果 self.begin_ambient_camera_rotation(rate=0.1) self.wait(5)
核心要点
- 使用
ThreeDScene替代普通Scene,它默认配置3D相机,无需手动设置camera_class。 Sphere的texture参数直接接收图片路径,网络URL需确保可正常访问,本地文件可使用相对或绝对路径。- 调用
set_camera_orientation调整初始视角,避免因默认视角导致球体不可见;begin_ambient_camera_rotation可添加自动旋转,提升展示效果。
额外提示
- 本地纹理图片建议放在项目根目录,直接使用文件名作为路径即可(如
texture="earth_map.jpg")。 - 若纹理显示拉伸或异常,检查图片分辨率是否适配球体尺寸,优先选择等比例的球面纹理图。
内容的提问来源于stack exchange,提问作者Kate Adams
相关产品推荐
相关产品推荐

