「Blenderスクリプトでチョコレートブロック(その1)」の続きです。
チョコレートを受けるグラスを作ります。
回転体の元になるカーブから作ります。
各ポイントの座標は、手で先にグラスの形を作って求めると簡単です。
xyzs = [ ( 0, 0, 0), ( 0, 0, 0), (-2.19903, 0, -0.01731), (-1.70155, 0, 0.29024), ( 0.14407, 0, 0.32944), (-1.077, 0, 1.02418), ( 0.40246, 0, 2), (-3.19444, 0, 2.09537), (-3.52777, 0, 4.90455)]
回転体にして、
bpy.ops.object.modifier_add(type="SCREW")
厚みを持たせて、
bpy.ops.object.modifier_add(type="SOLIDIFY")
MESHに変換します。
bpy.ops.object.convert(target="MESH")
MESHにしたら、剛体設定を、チョコレートブロックを設定した時と同じく設定し、今度はPASSIVEに。
bpy.ops.rigidbody.object_add(type='PASSIVE')
あとこのままだと、チョコレートが宙に浮いてしまうので、collision_shapeをMESHにしておきます。
cube.rigid_body.collision_shape='MESH'
全スクリプトです。
import bpy xyzs = [ ( 0, 0, 0), ( 0, 0, 0), (-2.19903, 0, -0.01731), (-1.70155, 0, 0.29024), ( 0.14407, 0, 0.32944), (-1.077, 0, 1.02418), ( 0.40246, 0, 2), (-3.19444, 0, 2.09537), (-3.52777, 0, 4.90455)] cv=bpy.data.curves.new('Curve', type='CURVE') cv.dimensions = '3D' cv.resolution_u = 2 line = cv.splines.new('NURBS') line.points.add(len(xyzs)) for i, xyz in enumerate(xyzs): x,y,z = xyz line.points[i].co = (x, y, z, 1) o = bpy.data.objects.new('Curve', cv) bpy.context.scene.objects.link(o) bpy.context.scene.objects.active = o o.select = True bpy.ops.object.modifier_add(type="SCREW") bpy.ops.object.modifier_add(type="SOLIDIFY") bpy.ops.object.convert(target="MESH") bpy.ops.rigidbody.object_add(type='PASSIVE') cube.rigid_body.collision_shape='MESH'
コメント
[…] ← Blenderスクリプトでチョコレートブロック(その2) […]