# 深圳中学3D模型 - 完整生成脚本
# Blender 3.4+ Python Script
# 清理场景
def clear_scene():
bpy.ops.object.select_all(action='SELECT')
bpy.ops.object.delete(use_global=False)
# 创建主教学楼
def create_main_building():
# 主体结构
bpy.ops.mesh.primitive_cube_add(location=(0, 0, 12))
building = bpy.context.object
building.scale = (60, 20, 12) # 120m x 40m x 24m
building.name = "Main_Building"
# 添加玻璃幕墙材质
material = bpy.data.materials.new("Glass_Facade")
material.use_nodes = True
nodes = material.node_tree.nodes
nodes.clear()
# 创建材质节点
bsdf = nodes.new(type='ShaderNodeBsdfPrincipled')
output = nodes.new(type='ShaderNodeOutputMaterial')
# 设置玻璃材质
bsdf.inputs['Base Color'].default_value = (0.8, 0.9, 1.0, 1.0)
bsdf.inputs['Transmission'].default_value = 0.9
bsdf.inputs['Roughness'].default_value = 0.1
bsdf.inputs['IOR'].default_value = 1.45
# 连接节点
material.node_tree.links.new(bsdf.outputs['BSDF'], output.inputs['Surface'])
building.data.materials.append(material)
return building
# 创建科技中心穹顶
def create_tech_dome():
# 主体球体
bpy.ops.mesh.primitive_uv_sphere_add(location=(80, 0, 7.5), radius=25)
dome = bpy.context.object
dome.scale = (1, 1, 0.3) # 扁平化
dome.name = "Tech_Dome"
# 金属材质
material = bpy.data.materials.new("Metal_Dome")
material.use_nodes = True
nodes = material.node_tree.nodes
nodes.clear()
bsdf = nodes.new(type='ShaderNodeBsdfPrincipled')
output = nodes.new(type='ShaderNodeOutputMaterial')
bsdf.inputs['Base Color'].default_value = (0.3, 0.3, 0.4, 1.0)
bsdf.inputs['Metallic'].default_value = 0.8
bsdf.inputs['Roughness'].default_value = 0.2
material.node_tree.links.new(bsdf.outputs['BSDF'], output.inputs['Surface'])
dome.data.materials.append(material)
return dome
# 创建围墙系统
def create_security_fence():
# 创建围墙基础
bpy.ops.mesh.primitive_cube_add(location=(0, 80, 1.5))
fence_north = bpy.context.object
fence_north.scale = (80, 1.5, 1.5)
fence_north.name = "Fence_North"
bpy.ops.mesh.primitive_cube_add(location=(0, -80, 1.5))
fence_south = bpy.context.object
fence_south.scale = (80, 1.5, 1.5)
fence_south.name = "Fence_South"
bpy.ops.mesh.primitive_cube_add(location=(80, 0, 1.5))
fence_east = bpy.context.object
fence_east.scale = (1.5, 80, 1.5)
fence_east.name = "Fence_East"
bpy.ops.mesh.primitive_cube_add(location=(-80, 0, 1.5))
fence_west = bpy.context.object
fence_west.scale = (1.5, 80, 1.5)
fence_west.name = "Fence_West"
# 创建观察塔
for i, pos in enumerate([(80, 80), (80, -80), (-80, 80), (-80, -80)]):
bpy.ops.mesh.primitive_cylinder_add(location=(pos[0], pos[1], 4), radius=2, depth=8)
tower = bpy.context.object
tower.name = f"WatchTower_{i+1}"
return [fence_north, fence_south, fence_east, fence_west]
# 创建地下设施入口
def create_underground_entrance():
bpy.ops.mesh.primitive_cube_add(location=(60, -60, 1))
entrance = bpy.context.object
entrance.scale = (8, 4, 1)
entrance.name = "Underground_Entrance"
# 斜坡
bpy.ops.mesh.primitive_cube_add(location=(60, -68, 0.5))
ramp = bpy.context.object
ramp.scale = (8, 4, 0.5)
ramp.rotation_euler = (math.radians(30), 0, 0)
ramp.name = "Entrance_Ramp"
return entrance, ramp
# 创建绿化环境
def create_environment():
# 创建地面
bpy.ops.mesh.primitive_plane_add(location=(0, 0, 0), size=200)
ground = bpy.context.object
ground.name = "Ground"
# 地面材质
material = bpy.data.materials.new("Ground_Material")
material.use_nodes = True
nodes = material.node_tree.nodes
nodes.clear()
bsdf = nodes.new(type='ShaderNodeBsdfPrincipled')
output = nodes.new(type='ShaderNodeOutputMaterial')
bsdf.inputs['Base Color'].default_value = (0.2, 0.6, 0.3, 1.0) # 绿色
bsdf.inputs['Roughness'].default_value = 0.9
material.node_tree.links.new(bsdf.outputs['BSDF'], output.inputs['Surface'])
ground.data.materials.append(material)
# 添加一些树木(简化表示)
for i in range(20):
x = (i % 5) * 30 - 60
y = (i // 5) * 30 - 60
if abs(x
) < 70 and
abs(y
) < 70: # 避开建筑区域 continue
bpy.ops.mesh.primitive_cone_add(location=(x, y, 2), radius1=1.5, depth=4)
tree = bpy.context.object
tree.name = f"Tree_{i+1}"
return ground
# 设置相机和灯光
def setup_scene():
# 设置相机
bpy.ops.object.camera_add(location=(150, -150, 80))
camera = bpy.context.object
camera.rotation_euler = (math.radians(60), 0, math.radians(45))
bpy.context.scene.camera = camera
# 设置灯光
bpy.ops.object.light_add(type='SUN', location=(50, -50, 50))
sun = bpy.context.object
sun.data.energy = 5
bpy.ops.object.light_add(type='AREA', location=(0, 0, 30))
area_light = bpy.context.object
area_light.data.energy = 100
area_light.scale = (20, 20, 1)
# 主执行函数
def main():
print("开始创建深圳中学3D模型...")
# 清理场景
clear_scene()
# 创建各个组件
main_building = create_main_building()
tech_dome = create_tech_dome()
fences = create_security_fence()
entrance, ramp = create_underground_entrance()
ground = create_environment()
# 设置场景
setup_scene()
print("深圳中学3D模型创建完成!")
print("模型包含:")
print("- 主教学楼 (120m x 40m x 24m)")
print("- 科技中心穹顶 (直径50m)")
print("- 围墙系统 (800m周长)")
print("- 地下设施入口")
print("- 绿化环境")
# 运行脚本
if __name__ == "__main__":
main()