[Blender2.8] Python으로 플레이트 폴리를 생성합니다. BMesh 사용하지 않는 버전과 사용하는 버전.

9003 단어 파이썬블렌더
BlenderPython 3일째. Blender에서 Python을 사용하여 모델링하기 위해 정점과 인덱스를 생성합니다. 물론, 툴 상에 존재하는 프리미티브에 관해서는 전용의 함수가 있기 때문에, 그것으로 문제없는 경우는 그쪽에서.

만드는 것



크기 1.0 판 폴리. v1 에서 v4 의 순서로 정점을 생성해, v1, v3, v2 와 v2, v3, v4 로 면을 붙인다.


객체의 메쉬에 직접 액세스하는 방법



이것이 편하다. mesh.from_pydata에서 빈 배열을 전달하는 두 번째 인수는 가장자리의 인덱스입니다. 점, 모서리, 면이 블렌더의 기본 요소입니다.
import bpy

vertsData = [(-0.5, -0.5, 0), (0.5, -0.5, 0.0),(-0.5,0.5, 0.0),(0.5,0.5,0.0)]
facesData = [(0,2,1),(1,2,3)]

# Create Mesh
mesh = bpy.data.meshes.new("mesh")
mesh.from_pydata(vertsData, [], facesData)  
mesh.update()

# Create Object
obj = bpy.data.objects.new("ItaPoly", mesh)
obj.data = mesh

# Add Object
scene = bpy.context.scene
scene.collection.objects.link(obj)

Bmesh를 이용하는 방법



정점과 인덱스를 갖게 하는 것만이라면, Bmesh로 할 필요는 없을 것 같다.
import bpy
import bmesh

verts = [(-0.5, -0.5, 0), (0.5, -0.5, 0.0),(-0.5,0.5, 0.0),(0.5,0.5,0.0)]

# Create Empty Mesh & Object
mesh = bpy.data.meshes.new("mesh")
obj  = bpy.data.objects.new("ItaPoly", mesh)

# Add Object
scene = bpy.context.scene
scene.collection.objects.link(obj)

# Create Bmesh
bm = bmesh.new()

bm_verts = []
for v in verts:
    b_v = bm.verts.new(v)
    bm_verts.append(b_v)

v1 = bm_verts[0]
v2 = bm_verts[1]
v3 = bm_verts[2]
v4 = bm_verts[3]

bm.faces.new([v1,v3,v2])
bm.faces.new([v2,v3,v4])

# QUAD
#bm.faces.new([v1,v2,v3,v4])

bm.to_mesh(mesh)
bm.free() # Release Bmesh

요약



Blender에서는 정점과 인덱스의 데이터를 준비하고 mesh.from_pydata에 전달하면 메쉬를 생성할 수 있다.

참고 (Blender2.8에서는 움직이지 않는 부분 있음)



Blender 2.80: Scene and Object API
create mesh then add vertices to it in python
different-ways-to-create-mesh-objects

좋은 웹페이지 즐겨찾기