
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()