【编程实践】利用python在Blender生成三维模型

发布于:2025-06-30 ⋅ 阅读:(16) ⋅ 点赞:(0)

在这里插入图片描述

import bpy
import bmesh

def create_material(name, color, image_path=None):
    mat = bpy.data.materials.new(name=name)
    mat.use_nodes = True
    bsdf = mat.node_tree.nodes.get("Principled BSDF")

    if image_path:
        # 贴图模式
        tex_image = mat.node_tree.nodes.new("ShaderNodeTexImage")
        tex_image.image = bpy.data.images.load(image_path)
        mat.node_tree.links.new(bsdf.inputs['Base Color'], tex_image.outputs['Color'])
    else:
        # 纯色
        bsdf.inputs['Base Color'].default_value = color

    return mat

def create_house():
    # 删除已有对象
    bpy.ops.object.select_all(action='SELECT')
    bpy.ops.object.delete(use_global=False)

    # 创建房子墙体(立方体)
    bpy.ops.mesh.primitive_cube_add(size=4, location=(0, 0, 2))
    wall = bpy.context.active_object
    wall.name = "Wall"

    # 创建屋顶(四棱锥)
    mesh = bpy.data.meshes.new("Roof_Mesh")
    roof = bpy.data.objects.new("Roof", mesh)
    bpy.context.collection.objects.link(roof)

    bm = bmesh.new()

    # 底部四角
    b = 2
    z_base = 4
    verts = [
        bm.verts.new((-b, -b, z_base)),
        bm.verts.new(( b, -b, z_base)),
        bm.verts.new(( b,  b, z_base)),
        bm.verts.new((-b,  b, z_base)),
    ]
    top = bm.verts.new((0, 0, z_base + 2))  # 屋顶顶点

    # 创建四个面(屋顶侧面)
    for i in range(4):
        bm.faces.new([verts[i], verts[(i + 1) % 4], top])
    # 底面
    bm.faces.new(verts)

    bm.to_mesh(mesh)
    bm.free()

    # 材质
    wall_mat = create_material("Wall_Mat", (0.8, 0.5, 0.3, 1))  # 棕墙
    roof_mat = create_material("Roof_Mat", (0.2, 0.1, 0.05, 1))  # 深屋顶

    wall.data.materials.append(wall_mat)
    roof.data.materials.append(roof_mat)

create_house()

网站公告

今日签到

点亮在社区的每一天
去签到