blende005添加网格对象Mesh
- 这是 oeasy 系统化 Python 教程,从基础一步步讲,扎实、完整、不跳步。愿意花时间学,就能真正学会。oeasy blender 005 调用函数添加猴头Monkey
开始
- 配套视频
- 上次 了解了
- blender背后的机制
- 表面上
- 添加对象、删除对象、修改对象
- 本质上 都是在后面
- 控制台 去执行python脚本 完成的
- 可以直接
- 使用代码
- 完成功能
- 我还是想要
新添加一个物体?🤔- 怎么添加呢?🤔
新建对象
- 想要添加对象
- 在3d视图上方
- 点击Add菜单
- 点击Monkey 猴子

- 出现了猴子
- 但是埋在 立方体中

清场
- 在游乐场 执行
-
清空代码
bpy.ops.object.select_all(action="SELECT") # 选择所有物体
bpy.ops.object.delete() # 删除选定的物体 -
场景清空

再尝试添加猴子

- 真的出来一只猴

- 可以 用快捷键 完成 添加对象 吗?
快捷键添加
-
还是先清场景
bpy.ops.object.select_all(action="SELECT") # 选择所有物体
bpy.ops.object.delete() # 删除选定的物体 -
光标放在Add上
- 出现快捷键提示

快捷键
- 选中3D视图主舞台
- 左手小拇指 先按下shift不松手
- 左手无名指 再按下 a
- 同时放开 两个按键
- 调出Add菜单

- 选中Cube进行添加
添加结果
- 三个地方出现新Cube
- 3d视图
- 场景 数据视图
- 当前文件 数据视图

- 消息面板中,出现命令

- 这就是新增Cube
- 对应的代码
复制命令
- 选中 代码
- 右键

- 拷贝之后
-
命令进入剪贴板
bpy.ops.mesh.primitive_cube_add(size=2, enter_editmode=False, location=(0, 0, 0))
-
在python调板中
- 粘贴并执行

- 执行结果 返回
- {FINISHED}
结果
- 场景调调板中出现
- 两个Cube

- 文件调板中出现
- 两个Cube

- 3d视图中
- 这两个Cube完全重合

- 想要避免完全重合
- 需要 控制初始位置
修改代码
bpy.ops.mesh.primitive_cube_add(size=2, enter_editmode=False, location=(0, 0, 3))
- 将初始位置设置为(0,0,3)

- 3d视图中
- 新Cube立方体
- 不重合
- 是否可以将函数中的参数清空?
清空
- 将代码粘贴到游乐场
-
全选
-
删除
bpy.ops.object.select_all(action="SELECT")
bpy.ops.object.delete()
-
清空场景中的对象
bpy.ops.mesh.primitive_cube_add()
-
在(0,0,0)的位置生成了Cube

- 这时候再设置Cube的属性
- Location
- Rotation
- Scale
设置
- 设置
-
位置
-
旋转
-
缩放
bpy.data.objects["Cube"].location = (1,2,3)
bpy.data.objects["Cube"].rotation_euler = (0.2,0.4,0.6)
bpy.data.objects["Cube"].scale = (1,2,3) -
设置成功

- 观察属性

- 这里面用到的bpy什么意思?
分析脚本
-
喊救命
help(bpy)
-
bpy 是一个 通过python控制blender的module
- Give access to blender data and utility functions
- 给予了
- 对于blender数据的存取
- 以及实用功能

- bpy里面有三个子模块
- ops
- path
- utils
- 我们使用的是
- bpy.ops
bpy.ops
help(bpy.ops)
- 查看帮助

- ops里面存的工具
- 可以用来进行各种操作
- operations
- 所以叫ops
再次尝试添加
- 选中3D视图主舞台
- shift + a

- 创建一个 Cylinder 圆柱体
创建过程
- 在信息调板中
- 选中信息
- 粘贴到python调板

- primitive_cylinder_add函数
-
就像 之前的 primitive_cube_add一样
-
是类似的结构
py.ops.mesh.primitive_cylinder_add(radius=1, depth=2, enter_editmode=False, location=(0, 0, 3))
-
可以找出
所有这类的函数吗?
尝试找到所有创建mesh的函数
- 先按⬆️ 找到上一条命令
- 重复按 ctrl + 退格
- 按照单词退格

-
直到下图状态
bpy.ops.mesh.primitive_
-
按下tab

- 这都什么意思呢?
网格对象
- 这对应着
- 各种mesh类型

- 添加的形状都有对应关系
|------------|------|
| English | 中文 |
| Plane | 矩形平面 |
| Cube | 正立方体 |
| Circle | 圆形平面 |
| Ico Sphere | 多面体 |
| Cylinder | 圆柱体 |
| Cone | 圆锥体 |
| Torus | 圆环 |
| Grid | 网格 |
| Monkey | 猴子 |
插入一个猴
bpy.ops.object.select_all(action="SELECT")
bpy.ops.object.delete()
bpy.ops.mesh.primitive_monkey_add()
- 尝试改变当前视角
|--------------|------|------|
| 键鼠配合 | 操作 | 效果 |
| 鼠标中键 | 滚动 | 镜头推拉 |
| 鼠标中键 | 按住拖动 | 镜头旋转 |
| shift + 鼠标中键 | 点击拖动 | 镜头平移 |
- 从新的角度观察它

- 确实是个猴
- 函数里面有什么参数呢?
参数含义
-
先粘贴以下代码
bpy.ops.mesh.primitive_monkey_add(
-
按下tab

- 参数含义
|----------------------|--------|
| 参数 | 含义 |
| size=2 | 尺寸 |
| calc_uvs=True | 计算uv面 |
| enter_editmode=False | 进入编辑模式 |
| align='WORLD' | 对齐方式 |
| location=(0, 0, 0) | 所在位置 |
| rotation=(0, 0, 0) | 旋转角度 |
- 猴创建之后
- 还能再移动吗?
尝试移动
- 选中猴子
- shift+空格
- 松手
- G
- 还是三种颜色
- 沿着 红绿蓝 三个坐标轴移动
- 分别对应着 xyz 三个移动轴

- 可以移动他的位置
- 能用代码移动吗?
苏珊娜
- 把猴子拖到游乐场

- 猴子为啥叫做苏珊娜?!
猴子来源
- 来自于电影
- 叫做苏珊娜的猴子
- 用于测试

- 还有什么类似的
- 知名模型吗?
犹他茶壶

wget https://labfile.oss.aliyuncs.com/courses/3584/Utah_teapot_%28solid%29_low_poly%2B.stl

- 文件 File
- 导入 import
- stl文件
兔子

- 斯坦福 兔子

移动猴子
- 先把导入的犹他茶壶删除掉
- 场景中 只有 猴子
- 尝试用代码改变
-
位置 position
-
旋转 rotation
-
缩放 scale
bpy.data.objects["Suzanne"].location = (1,2,3)
bpy.data.objects["Suzanne"].rotation_euler = (0.2,0.4,0.6)
bpy.data.objects["Suzanne"].scale = (1,1,1.5) -
猴子拉长了脸😄
效果

- 参数

总结
- 这次 用代码
- 调用 一些函数 完成了
- 新建物体
- 设置物体位置、旋转、缩放

- 可以用纯代码
- 新建Mesh对象阵列
- 并且排队布阵吗?🤔