blender中,所有可以在Blender软件中的手动操作,基本都可以通过Python API 完成
那么就可以用这个完成程序化生成
下面我给出一个简单的方块建模程序:
在scripting中,可以添加file,然后向场景中心放置一个正方体
首先正方体需要八个点:
(0,0,0),(0,1,0),(1,1,0),(1,0,0),(0,0,1),(0,1,1),(1,1,1),(1,0,1)八个点
然后相邻的四个点可以组成一个面
verts = [(0,0,0),(0,1,0),(1,1,0),(1,0,0),(0,0,1),(0,1,1),(1,1,1),(1,0,1)]
比如分别在以上数组中0,1,2,3四个点,然后我们创建它的连接关系
faces = [(0,1,2,3), (4,5,6,7), (0,4,5,1), (1,5,6,2), (2,6,7,3), (3,7,4,0)]
首先需要生成网格体mesh
mesh = bpy.data.meshes.new("MyCube")
用这个这个网格体初始化一个类
object = bpy.data.objects.new("MyCube", mesh)
设置物体的坐标,这个可以在指定放置物体的位置:
object.location = [0,0,0]
然后使用 from_pydata将顶点和连接关系传入mesh中:
mesh.from_pydata(verts,[],faces)
context是Blender数据管理中的一个全局变量集合,然后拿到场景的物体集合,没错,就是右边框的那个
将物体放入collection场景中
bpy.context.collection.objects.link(object)
然后看右边 collection下面出现了Cube
场景中也出现了自己定义的MyCube:
总体代码如下
import bpy
#定义点和连接关系的数组
verts = [(0,0,0),(0,1,0),(1,1,0),(1,0,0),(0,0,1),(0,1,1),(1,1,1),(1,0,1)]
faces = [(0,1,2,3), (4,5,6,7), (0,4,5,1), (1,5,6,2), (2,6,7,3), (3,7,4,0)]
#创建一个mesh,并初始化为一个类
mesh = bpy.data.meshes.new("MyCube")
object = bpy.data.objects.new("MyCube", mesh)
#设置物体坐标
object.location = [0,0,0]
#将数组传入模型中
mesh.from_pydata(verts,[],faces)
#将物体放入collection场景中
bpy.context.collection.objects.link(object)