oeasy blender008 三轴旋转效果

blender008角度与弧度rad

  • 这是 oeasy 系统化 Python 教程,从基础一步步讲,扎实、完整、不跳步。愿意花时间学,就能真正学会。

三轴旋转效果_加号制作_角度弧度转化

开始

  • ​所有​对象 为全景 Frame ​All​
  • ​所选​对象 为全景 Frame ​Selected​
  • 还可以 手动改变

|--------------|------|------|
| 键鼠配合 | 操作 | 效果 |
| 鼠标中键 | 滚动 | 镜头推拉 |
| 鼠标中键 | 按住拖动 | 镜头旋转 |
| shift + 鼠标中键 | 点击拖动 | 镜头平移 |

  • 后面加入了随机的因素
  • 一字长蛇
  • 方阵
  • 立体魔方
  • 加入了随机性
  • 最后做了
  • 圆形
  • 螺旋形
  • 旋转楼梯
  • 都用到了角度的计算
  • 如何理解​角度​??🤔
建立立方体
  • 清空场景
  • shift + a
  • 建立一个立方体
  • 找到scale[0]
  • 设置为3

    import bpy

    bpy.ops.object.select_all(action="SELECT")
    bpy.ops.object.delete()
    bpy.ops.mesh.primitive_cube_add(size = 1)
    bpy.context.object.scale[0] = 3

  • 可以看到

  • 立方体在x方向
  • 缩放为原来三倍
  • 现在需要
  • 把横变成竖
旋转
  • 尝试旋转此立方体
  • 选中立方体
  • shift + 空格 之后 r
  • 可以 旋转立方体
  • xyz 三个轴的缩放值构成一个列表
  • scale[0] 是 x轴
  • scale[1] 是 y轴
  • scale[2] 是 z轴
绿色坐标轴
  • 总共有三个轴向
  • 我想沿着绿色的轴向旋转
  • 设置 旋转值
  • 第二个分量 为90度
  • ctrl 可以以5度为单位旋转
具体代码
  • 将对象拖动到游乐场
  • 找到对应的参数
  • 尝试设置
代码实现
复制代码
import bpy

bpy.ops.object.select_all(action="SELECT")
bpy.ops.object.delete()
bpy.ops.mesh.primitive_cube_add(size = 1)
bpy.context.object.scale[0] = 3
bpy.context.object.rotation_euler[1] = 1.5708
  • 原来
  • 旋转就是
  • 改变object.rotation_euler
  • xyz 三个轴向的旋转值构成一个列表
  • rotation_euler[0] 是 x轴 保持
  • rotation_euler[1] 是 y轴 设置为 1.5708
  • rotation_euler[2] 是 z轴 保持
效果
  • 原来的横
  • 变成了竖
等效
  • 在下面三个地方操作是等效的
  • 3d 视图 手动旋转
  • 属性视图 修改值
  • python 视图 写代码
  • 这个1.5708怎么来的呢?
角度 弧度
  • 弧度制
  • 将和半径相等的弧长对应的角度
  • 定义为1
  • 一周
  • 弧度制 2*π ≈ 6.28
  • 角度制 360°
  • 直角
  • 角度制 360 / 4 = 90°
  • 弧度制 2π /4 = π/2 ≈ 1.5708
  • 想要在此竖的基础上
  • 再来一个横
一竖一横
复制代码
import bpy

bpy.ops.object.select_all(action="SELECT")
bpy.ops.object.delete()
bpy.ops.mesh.primitive_cube_add(size = 1)
bpy.context.object.scale[0] = 3
bpy.context.object.rotation_euler[1] = 1.5708
bpy.ops.mesh.primitive_cube_add(size = 1)
bpy.context.object.scale[0] = 3
  • 得到结果
新形状
  • 如果 想做
  • 下面这个造型
  • 该如何修改代码
代码
复制代码
import bpy

bpy.ops.object.select_all(action="SELECT")
bpy.ops.object.delete()
for num in range(3):
	bpy.ops.mesh.primitive_cube_add(size = 1)
	bpy.context.object.scale[num] = 3
  • 效果
新想法
  • 可以布下圆形之阵吗?
批量旋转
复制代码
import bpy
from math import pi,cos,sin
r = 3
n = 24
for i in range(n):
    theta = i * pi * 2/n
    pos = (r*cos(theta), r*sin(theta), 0)
    bpy.ops.mesh.primitive_cube_add(size=0.6,location=pos,
    rotation=(0,0,theta))
  • 效果
再修改scale
复制代码
import bpy
from math import pi,cos,sin
r = 4
n = 40
for i in range(n):
    theta = i * pi * 2/n
    pos = (r*cos(theta), r*sin(theta), 0)
    bpy.ops.mesh.primitive_cube_add(size=0.6,location=pos,rotation=(0,0,theta))
    bpy.context.object.scale = (0.5,0.1,0.1)
修改参数
复制代码
import bpy
from math import pi,cos,sin
r = 4
n = 100
for i in range(n):
    theta = i * pi * 2/n
    pos = (r*cos(theta), r*sin(theta), 0)
    bpy.ops.mesh.primitive_cube_add(size=0.6,location=pos,rotation=(0,0,theta))
    bpy.context.object.scale = (1,0.2,0.2)
  • 结果
手掌效果
  • 各个手指都是掰开了的👋
复制代码
import bpy

mat = bpy.data.materials.new('red')
color = (0.7,0.2,0.1,1)
mat.diffuse_color = color
bpy.ops.mesh.primitive_cube_add()
hand=bpy.context.object
hand.location=(0,0,0,)
hand.scale=(0.3,1,1)
hand.data.materials.append(mat)
   

bpy.ops.mesh.primitive_cube_add()
finger1=bpy.context.object
finger1.location=(0,-1.2,0.2,)
finger1.scale=(0.3,1,0.3)
finger1.data.materials.append(mat)

bpy.ops.mesh.primitive_cube_add()
finger2=bpy.context.object
finger2.location=(0,-0.8,1.3,)
finger2.scale=(0.3,0.15,1.5)
finger2.data.materials.append(mat)

bpy.ops.mesh.primitive_cube_add()
finger3=bpy.context.object
finger3.location=(0,-0.3,1.3,)
finger3.scale=(0.3,0.15,1.5)
finger3.data.materials.append(mat)

bpy.ops.mesh.primitive_cube_add()
finger4=bpy.context.object
finger4.location=(0,0.3,1.3,)
finger4.scale=(0.3,0.15,1.5)
finger4.data.materials.append(mat)

bpy.ops.mesh.primitive_cube_add()
finger5=bpy.context.object
finger5.location=(0,0.8,1.3,)
finger5.scale=(0.3,0.15,1.5)
finger5.data.materials.append(mat)

bpy.ops.mesh.primitive_plane_add()
plane=bpy.context.object
plane.scale=(10,10,1,)
plane.location=(0,0,-1)
总结 🤔
  • 这次
  • 物体的旋转
  • 角度和弧度制的转化
  • 布下了圆形之阵
  • 如果一个 造型 做出来了
  • 比如加号
  • 想让他以一个整体的方式 旋转
  • 旋转 为 乘号
  • 应该如何修改代码呢?
  • 我们下次再说!👋
  • ​配套视频​
  • 本文来自 oeasy Python 系统教程。
  • 想完整、扎实学 Python,
  • 搜索 oeasy 即可。
相关推荐
CG_MAGIC5 天前
3D 软件文件格式详解:OBJ/FBX/USD 导出与导入规范
3d·blender·贴图·建模教程·渲云渲染
CG_MAGIC6 天前
V-Ray 光照贴图烘焙参数适配教程
3d·blender·贴图·效果图·建模教程·渲云渲染
XR101yqm12216 天前
Blender2026渲染引擎对决:Cycles和Eevee Next,如何做出正确选择?
blender·cycles·eevee
夕除6 天前
blender--01
blender
a1117766 天前
Rigify功能手动制作动画(blender)
blender
XR101yqm12216 天前
Blender 会取代 C4D 吗?AI 时代 3D 软件的选择逻辑!
ai·blender·cinema4d
overmind20 天前
oeasy blender 010 制作一个c919飞机,理解层级关系
blender
overmind21 天前
oeasy blender 005 调用函数添加猴头Monkey
blender
overmind21 天前
oeasy blender007 让对象在空间列阵
blender
Nan_Shu_61421 天前
学习: Blender 动画篇
学习·blender