Skip to content

Latest commit

 

History

History
196 lines (143 loc) · 4.13 KB

658-2685809-Mesh_网格_效果.sy.md

File metadata and controls

196 lines (143 loc) · 4.13 KB
show version enable_checker
step
1.0
true

python_blender

开始

  • 上次做了很多c919
    • 每个飞机都有自己的机身、机翼...
  • 这个Cube对象里面
    • 怎么还有个绿色的Cube呢?

图片描述

切换窗口

  • 两个Cube不光颜色不同
    • 类型也不同

图片描述

颜色 类型 方式
黄色 Cube Object 对象 前端显示
绿色 Cube Mesh 网格 后台数据存储

得到mesh对象

  • 第一步
    • 获取网格数据 'Cube'
    • 将其指定给变量mesh(自定义的名称,也可以是别的)
mesh = bpy.data.meshes['Cube'] 
  • 如何 根据 网格
    • 生成对象呢?

生成对象

obj = bpy.data.objects.new(
  • 按下 Tab 得到提示

图片描述

  • 参数需要两个
    1. 对象的名字
    2. 对象的数据
obj = bpy.data.objects.new("oeasy",mesh)

链接对象

  • 此时Scene Collection调版里面没有obj
    • 但是文件调版里面已经有了
    • 此时需要把obj 链接到 场景
bpy.context.collection.objects.link(obj) 
  • 效果

图片描述

  • obj进入场景
import bpy
# 获取网格数据,赋给变量mesh
mesh = bpy.data.meshes['Cube']
# 生成新的对象数据,赋给变量object
obj = bpy.data.objects.new('oeasy',mesh)
# 将对象数据链接到场景中,从而显示对象
bpy.context.collection.objects.link(obj) 
  • 为什么分别用
    • bpy.data.objects
    • bpy.context.collection.objects

对象

  • bpy.context.collection.objects
    • 对应 当前场景 上下文中
    • 只有collection集合

图片描述

  • bpy.data.objects
    • 对应文件调版里面
    • 对象 更多

mesh的修改

import bpy
bpy.data.objects["Cube"].data.vertices[0].co.x += 1.0
  • 可以修改第一个点的x坐标

图片描述

使用点的方式生成面

import bpy
verts = [(0,0,0),(0,1,0),(1,1,0),(1,0,0)]
edges = []
faces = [(0,1,2,3)]
mesh = bpy.data.meshes.new('Mesh')
mesh.from_pydata(verts,edges,faces)
new_object = bpy.data.objects.new('Object',mesh)
bpy.context.collection.objects.link(new_object) 
  • 最终效果

图片描述

编辑和观察

  • 选中方片
    • 按下 tab
    • 切换编辑模式

图片描述

金字塔

import bpy
import math

bpy.ops.object.select_all(action='DESELECT')
bpy.ops.object.select_by_type(type='MESH')
bpy.ops.object.delete()

verts = [
    (1, 1, 1),
    (-1, 1, 1),
    (0, -1, 1),
    (0, 0, -1)  
]
faces = [
    (0, 1, 2),
    (0, 1, 3),
    (1, 2, 3),
    (0, 2, 3)
]
mesh = bpy.data.meshes.new("PyramidMesh")
mesh.from_pydata(verts, [], faces)
obj = bpy.data.objects.new("Pyramid", mesh)
scene = bpy.context.scene
scene.collection.objects.link(obj)

mat = bpy.data.materials.new(name="PinkMaterial")
mat.diffuse_color = (1, 0.5, 0.5, 1)  # RGBA颜色
obj.data.materials.append(mat)

bpy.ops.object.light_add(type='SPOT', radius=1, location=(6.27,-3.4,2.83))
spot_light = bpy.context.object
spot_light.data.energy = 1000
spot_light.rotation_euler = (1.172,0,0.907)

camera_data = bpy.data.cameras.new(name="Camera")
camera_obj = bpy.data.objects.new(name="Camera", object_data=camera_data)
scene.collection.objects.link(camera_obj)
camera_obj.location = (13.6, 5, 10.5)
camera_obj.rotation_euler = (-2.233,3.14,-1.047)
scene.camera = camera_obj

scene.render.engine = 'CYCLES'
scene.render.image_settings.file_format = 'PNG'
scene.render.filepath = '/tmp/render2.png'
scene.render.resolution_x = 640
scene.render.resolution_y = 480
scene.render.resolution_percentage = 50

bpy.ops.render.render(write_still=True)

总结 🤔

  • 我们下次再说!👋