如何在Python Ursina引擎中为单个模型加载多张纹理
Ursina 单个模型加载多张纹理实现方案
前置要求
你用于渲染的房屋3D模型,需要提前在建模工具(如Blender)中为不同部位(墙面、楼板、窗户)分配独立的材质槽,且材质槽的顺序和你要加载的纹理顺序一一对应,这是多纹理生效的前提。
现有代码问题
Ursina中Entity(Button继承自Entity)的单纹理参数为texture,多纹理需要用复数形式的textures参数传列表,且你设置的color = color.lime会给所有纹理叠加绿色色调,若不需要纹理染色建议改为白色。
修正后可运行代码
textures = ["wall", "slap", "window"] class Homes(Button): def __init__(self, pos = (10,1,0)): super().__init__( parent = scene, model = 'images/house', textures = textures, # 单纹理参数texture改为多纹理参数textures scale = (5,12,5), position = pos, color = color.white, # 不需要纹理染色改回白色,避免影响纹理原始显示效果 origin_y = 0.5, ) home = Homes()
额外注意事项
- 如果纹理没有正常显示,首先检查模型材质槽的顺序是否和
textures列表的顺序匹配 - 如果你的纹理文件不是默认的png格式,需要在纹理名中补全后缀,例如
"wall.jpg" - 如果你需要在同一个面上叠加多层纹理,可以额外使用
texture2、texture3参数单独指定叠加层纹理
内容的提问来源于stack exchange,提问作者proking
相关产品推荐
相关产品推荐

