Skip to content

Latest commit

 

History

History
480 lines (321 loc) · 9.12 KB

File metadata and controls

480 lines (321 loc) · 9.12 KB
Error in user YAML: (<unknown>): could not find expected ':' while scanning a simple key at line 4 column 1
---
show: step
version: 1.0 
enable_checker: true
本教程同步发布在: 

     个人网站: `https://oeasy.org` 
     蓝桥云课: `https://www.lanqiao.cn/courses/3584` 
     GitHub: `https://github.com/overmind1980/oeasy-python-tutorial` 
     Gitee: `https://gitee.com/overmind1980/oeasypython` 
---

  • oeasy Python 0678
  • 这是 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视图主舞台
    1. 左手小拇指 先按下shift不松手
    2. 左手无名指 再按下 a
    3. 同时放开 两个按键
    4. 调出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立方体
    • 不重合
  • 是否可以将函数中的参数清空?

清空

  • 将代码粘贴到游乐场
    1. 全选
    2. 删除
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对象阵列
    • 并且排队布阵吗?🤔
  • 我们下次再说!👋

  • 配套视频


  • 本文来自 oeasy Python 系统教程。
  • 想完整、扎实学 Python,
  • 搜索 oeasy 即可。