【编程实践】利用python在Blender生成三维模型
使用Blender Python API(bpy)创建3D房屋模型的脚本。
·
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()
更多推荐
所有评论(0)