show | version | enable_checker |
---|---|---|
step |
1.0 |
true |
-
上次研究了父子关系
- 父亲旋转 儿子跟着
- 可以通过设置parent控制父子关系
-
可以 新建一个 空对象 None
- 作为 总爸爸
- 然后 将 各种对象放入其中
- 爸爸👨 可以控制很多儿子👦👦👦
- 可以做出这样的交叉体吗?
- 先来第一个 立方体
import bpy
import math
# clear current scene
bpy.ops.object.select_all(action="SELECT") # 选择所有物体
bpy.ops.object.delete() # 删除选定的物体
# create objects
empty_obj = bpy.data.objects.new("empty", None)
empty_obj.name = "Parent"
bpy.data.collections["Collection"].objects.link(empty_obj)
bpy.ops.mesh.primitive_cube_add(size=2, enter_editmode=False, location=(0, 0, 0))
bpy.context.object.scale[0] = 3
bpy.context.object.parent = empty_obj
bpy.context.object.name = "elder_brother"
- 运行结果
- 需要旋转一下
- 具体怎么旋转呢?
- shift + a
- 按 r 进入 rotation模式
- 需要沿着 x 轴旋转 45度
import bpy
from math import pi
# clear current scene
bpy.ops.object.select_all(action="SELECT") # 选择所有物体
bpy.ops.object.delete() # 删除选定的物体
# create objects
empty_obj = bpy.data.objects.new("empty", None)
empty_obj.name = "Parent"
bpy.data.collections["Collection"].objects.link(empty_obj)
bpy.ops.mesh.primitive_cube_add(size=2, enter_editmode=False, location=(0, 0, 0))
bpy.context.object.scale[0] = 3
bpy.context.object.parent = empty_obj
bpy.context.object.name = "elder_brother"
bpy.context.object.rotation_euler[0] = pi / 4
- 哥哥有了
- 弟弟 应该在哥哥的基础上 再转
- 再在 x 轴旋转 90度
import bpy
from math import pi
# clear current scene
bpy.ops.object.select_all(action="SELECT") # 选择所有物体
bpy.ops.object.delete() # 删除选定的物体
# create objects
empty_obj = bpy.data.objects.new("empty", None)
empty_obj.name = "Parent"
bpy.data.collections["Collection"].objects.link(empty_obj)
bpy.ops.mesh.primitive_cube_add(size=2, enter_editmode=False, location=(0, 0, 0))
bpy.context.object.scale[0] = 3
bpy.context.object.parent = empty_obj
bpy.context.object.name = "elder_brother"
bpy.context.object.rotation_euler[0] = pi / 4
bpy.ops.mesh.primitive_cube_add(size=2, enter_editmode=False, location=(0, 0, 0))
bpy.context.object.scale[0] = 3
bpy.context.object.parent = empty_obj
bpy.context.object.name = "younger_brother"
bpy.context.object.rotation_euler[0] = pi / 4
bpy.context.object.rotation_euler[1] = pi / 2
- 结果
- 尝试让新交叉体
- 再旋转45度
import bpy
from math import pi
# clear current scene
bpy.ops.object.select_all(action="SELECT") # 选择所有物体
bpy.ops.object.delete() # 删除选定的物体
# create objects
empty_obj = bpy.data.objects.new("empty", None)
empty_obj.name = "Parent"
bpy.data.collections["Collection"].objects.link(empty_obj)
bpy.ops.mesh.primitive_cube_add(size=2, enter_editmode=False, location=(0, 0, 0))
bpy.context.object.scale[0] = 3
bpy.context.object.parent = empty_obj
bpy.context.object.name = "elder_brother"
bpy.context.object.rotation_euler[0] = pi / 4
bpy.ops.mesh.primitive_cube_add(size=2, enter_editmode=False, location=(0, 0, 0))
bpy.context.object.scale[0] = 3
bpy.context.object.parent = empty_obj
bpy.context.object.name = "younger_brother"
bpy.context.object.rotation_euler[0] = pi / 4
bpy.context.object.rotation_euler[1] = pi / 2
empty_obj.rotation_euler[1] = pi/4
- 从父级对象旋转
- 想做一些更复杂的东西
- 先手工做一下试试
- 先 插入一个 圆柱体
- 然后控制圆柱体
- z轴缩放为5
- x轴旋转为90度
- 下面试试代码
import bpy
bpy.ops.mesh.primitive_cylinder_add(radius=1, depth=2)
- 确实出现了 圆柱体
- 可以观察到两个参数
- radius 半径
- depth 高度
import bpy
bpy.ops.mesh.primitive_cylinder_add(radius=1, depth=5)
- 尝试修改代码
- 机身有了 准备旋转
- 机身可以再长一点
import bpy
from math import pi
bpy.ops.mesh.primitive_cylinder_add(radius=1, depth=5)
bpy.context.object.rotation_euler[0] = pi / 2
- 机身 延长 并旋转
- 准备加上 尾翼
- 尾翼参数如下
- 现需要 转化为 代码
import bpy
from math import pi
bpy.ops.object.select_all(action="SELECT") # 选择所有物体
bpy.ops.object.delete() # 删除选定的物体
bpy.ops.mesh.primitive_cylinder_add(radius=1, depth=7)
bpy.context.object.rotation_euler[0] = pi /2
bpy.ops.mesh.primitive_cube_add(size=2)
bpy.context.object.scale = (0.25,0.75,1)
bpy.context.object.rotation_euler[0] = pi / 4
bpy.context.object.location = (0, -3 ,1)
- 结果
- 参数
import bpy
from math import pi
bpy.ops.object.select_all(action="SELECT") # 选择所有物体
bpy.ops.object.delete() # 删除选定的物体
bpy.ops.mesh.primitive_cylinder_add(radius=1, depth=9)
bpy.context.object.rotation_euler[0] = pi /2
bpy.ops.mesh.primitive_cube_add(size=2)
bpy.context.object.scale = (0.2,0.75,1)
bpy.context.object.rotation_euler[0] = - pi / 4
bpy.context.object.location = (0, 5 ,1)
bpy.ops.mesh.primitive_cube_add(size=2)
bpy.context.object.scale = (1,0.5,0.25)
bpy.context.object.location = (0, 5 ,1)
- 运行成功
- 准备加机翼
- 参数
import bpy
from math import pi
bpy.ops.object.select_all(action="SELECT") # 选择所有物体
bpy.ops.object.delete() # 删除选定的物体
bpy.ops.mesh.primitive_cylinder_add(radius=1, depth=9)
bpy.context.object.rotation_euler[0] = pi /2
bpy.ops.mesh.primitive_cube_add(size=2)
bpy.context.object.scale = (0.2,0.75,1)
bpy.context.object.rotation_euler[0] = - pi / 4
bpy.context.object.location = (0, 5 ,1)
bpy.ops.mesh.primitive_cube_add(size=2)
bpy.context.object.scale = (1,0.5,0.25)
bpy.context.object.location = (0, 5 ,1)
bpy.ops.mesh.primitive_cube_add(size=2)
bpy.context.object.scale = (5,1,0.25)
bpy.context.object.location = (0, -1 ,0)
- 可以得到飞机
- 现在需要把所有的部件
- 封装到c919中
- 并且每个对象都要
明确
命名
import bpy
from math import pi
bpy.ops.object.select_all(action="SELECT") # 选择所有物体
bpy.ops.object.delete() # 删除选定的物体
c919 = bpy.data.objects.new("c919", None)
bpy.data.collections["Collection"].objects.link(c919)
bpy.ops.mesh.primitive_cylinder_add(radius=1, depth=9)
bpy.context.object.rotation_euler[0] = pi /2
bpy.context.object.parent = c919
bpy.ops.mesh.primitive_cube_add(size=2)
bpy.context.object.name = "body"
bpy.context.object.scale = (0.2,0.75,1)
bpy.context.object.parent = c919
bpy.context.object.rotation_euler[0] = - pi / 4
bpy.context.object.location = (0, 5 ,1)
bpy.context.object.parent = c919
bpy.context.object.name = "tail1"
bpy.ops.mesh.primitive_cube_add(size=2)
bpy.context.object.scale = (1,0.5,0.25)
bpy.context.object.location = (0, 5 ,1)
bpy.context.object.parent = c919
bpy.context.object.name = "tail2"
bpy.ops.mesh.primitive_cube_add(size=2)
bpy.context.object.scale = (5,1,0.25)
bpy.context.object.location = (0, -1 ,0)
bpy.context.object.parent = c919
bpy.context.object.name = "wings"
- 结果
- 可以让 封装好的c919移动旋转吗?
- 控制 封装对象
- 这次我们通过代码制作出了
- 一架传统大飞机
- 飞机由几部分构成
- 机身 body
- 尾翼 tail1 + tail2
- 机翼 wings
- 可以让这个飞机进行旋转吗?
- 我们下次再说!👋