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 即可。
相关推荐
Nan_Shu_6143 小时前
学习: Blender 合成篇
学习·blender
成都渲染101云渲染66664 小时前
Blender云渲染平台哪个好?2026全面对比与选择指南
blender
CG_MAGIC1 天前
Blender幕后花絮:王国受袭——叛乱
3d·blender·贴图·建模教程·渲云渲染
overmind1 天前
oeasy blender 004 在脚本工作区选择对象删除
blender
overmind1 天前
oeasy blender 003 blender中的游乐场,用参数运行模式
blender
overmind2 天前
oeasy blender 002 工作区的控制
blender
overmind3 天前
oeasy blender 001 blender的安装和工作流_workflow
blender
dlpay9 天前
使用blender搭建模型并导入godot游戏引擎
游戏引擎·godot·blender
njsgcs11 天前
blender开发 RuntimeError: name ‘mathutils‘ is not defined解决办法
blender