3Dビュー→追加→メッシュ→立方体で作られるメッシュと同じものを作りたい。
この立方体実はBlenderを起動したときに出てくる立方体とは面の向きが違うのでちょっと注意が必要なのである。
bpy.data系の場合
頂点の座標と面のidは図のようになっている
スクリプトで確認
obj=bpy.context.object msh = bpy.data.meshes[obj.data.name] for v in msh.vertices: print(v.co)
結果
<Vector (-1.0000, -1.0000, -1.0000)> <Vector (-1.0000, -1.0000, 1.0000)> <Vector (-1.0000, 1.0000, -1.0000)> <Vector (-1.0000, 1.0000, 1.0000)> <Vector (1.0000, -1.0000, -1.0000)> <Vector (1.0000, -1.0000, 1.0000)> <Vector (1.0000, 1.0000, -1.0000)> <Vector (1.0000, 1.0000, 1.0000)>
それぞれの面が持ってる頂点のIdを確認
for v in msh.polygons: print(v.vertices[0:])
結果
(0, 1, 3, 2) (2, 3, 7, 6) (6, 7, 5, 4) (4, 5, 1, 0) (2, 6, 4, 0) (7, 3, 1, 5)
以上をもとにmeshを作ってみる
import bpy #頂点座標を上のと同じ順で行列に入れていく vertices=[ [ -1 , -1 , -1 ], [ -1 , -1 , 1 ], [ -1 , 1 , -1 ], [ -1 , 1 , 1 ], [ 1 , -1 , -1 ], [ 1 , -1 , 1 ], [ 1 , 1 , -1 ], [ 1 , 1 , 1 ] ] #辺は特に設定の必要なし edges = [] #面と頂点のidを紐づける #面に向かって時計回りの逆に頂点を登録していく faces = [ [ 0 , 1 , 3 , 2 ], [ 2 , 3 , 7 , 6 ], [ 6 , 7 , 5 , 4 ], [ 4 , 5 , 1 , 0 ], [ 2 , 6 , 4 , 0 ], [ 7 , 3 , 1 , 5 ] ] mesh = bpy.data.meshes.new( 'mesh' ) mesh.from_pydata( vertices, edges, faces ) obj = bpy.data.objects.new( 'new_cube', mesh ) co = bpy.context.collection obj.location = (0, 0, 0) co.objects.link(obj)
長い・・・。
一行で済んだ方が楽。