アニメ『正解するカド』
序盤だけかもですが、ネゴシエートする相手である宇宙人があまりにもチョロい気がして、交渉も何もないじゃないかあと思ってしまいます。でも面白いです。アニメ好きじゃなくても楽しめそうな内容で、とにかく巨大なCubeが好きですねえ。実写化してほしいです。もし実写化されたら楽しみなシーンは、最初の旅客機が吸い込まれるシーンと、戦車の走行シーン。ああ、もっと戦車登場しないですかねえ。
今回はBlenderです。Add ModifierでBooleanを使ってみます。
cube=bpy.data.objects['Cube'] bpy.ops.mesh.primitive_uv_sphere_add() sphere=bpy.data.objects['Sphere'] bpy.ops.transform.translate(value=(0,0,1)) bpy.ops.transform.resize(value=(0.3, 0.3, 0.3)) bpy.context.scene.objects.active=cube bpy.ops.object.modifier_add(type='BOOLEAN') bpy.context.object.modifiers['Boolean'].operation='DIFFERENCE' bpy.context.object.modifiers['Boolean'].object = sphere bpy.ops.object.modifier_apply(apply_as='DATA', modifier='Boolean')
球体をずらすと、球体の形にへこんでいますね。
最後に球体を削除します。
bpy.context.scene.objects.active=sphere bpy.ops.object.delete()
ではこの機能を利用してサイコロを作ってみましょう。
サイコロの目の数だけ球体を用意しますが、位置はあらかじめ決めてリスト化しておきます。
dice=[ [(0,0,1)], [(1, 0.5, -0.5),(1, -0.5, 0.5)], [(0.5, 1, 0.5),(-0.5, 1, -0.5),(0, 1, 0)], [(0.5, -1, 0.5),(-0.5, -1, 0.5),(0.5, -1, -0.5),(-0.5, -1, -0.5)], [(-1, 0.5, 0.5),(-1, -0.5, 0.5),(-1, 0.5, -0.5),(-1, -0.5, -0.5),(-1, 0, 0)], [(0.5, 0.6,-1),(0.5, 0, -1),(0.5, -0.6, -1),(-0.5, 0.6,-1),(-0.5, 0, -1),(-0.5, -0.6, -1)] ]
リストを回して球体を配置します。
for locs in dice: for loc in locs: bpy.ops.mesh.primitive_uv_sphere_add() bpy.ops.transform.translate(value=loc) bpy.ops.transform.resize(value=(0.3, 0.3, 0.3))
Sphereから始まるすべてのオブジェクトを結合しておきます。
sphere_objs=[o for o in bpy.data.objects if o.name.startswith('Sphere')] for o in sphere_objs: o.select=True bpy.context.scene.objects.active=bpy.data.objects['Sphere'] bpy.ops.object.join()
立方体を球体の形にくりぬきます。
sphere=bpy.data.objects['Sphere'] bpy.context.scene.objects.active=cube bpy.ops.object.modifier_add(type='BOOLEAN') bpy.context.object.modifiers['Boolean'].operation='DIFFERENCE' bpy.context.object.modifiers['Boolean'].object = sphere bpy.ops.object.modifier_apply(apply_as='DATA', modifier='Boolean')
移動させると、サイコロが目ができています。
全スクリプトです。
dice=[ [(0,0,1)], [(1, 0.5, -0.5),(1, -0.5, 0.5)], [(0.5, 1, 0.5),(-0.5, 1, -0.5),(0, 1, 0)], [(0.5, -1, 0.5),(-0.5, -1, 0.5),(0.5, -1, -0.5),(-0.5, -1, -0.5)], [(-1, 0.5, 0.5),(-1, -0.5, 0.5),(-1, 0.5, -0.5),(-1, -0.5, -0.5),(-1, 0, 0)], [(0.5, 0.6,-1),(0.5, 0, -1),(0.5, -0.6, -1),(-0.5, 0.6,-1),(-0.5, 0, -1),(-0.5, -0.6, -1)] ] cube=bpy.data.objects['Cube'] for locs in dice: for loc in locs: bpy.ops.mesh.primitive_uv_sphere_add() bpy.ops.transform.translate(value=loc) bpy.ops.transform.resize(value=(0.3, 0.3, 0.3)) sphere_objs=[o for o in bpy.data.objects if o.name.startswith('Sphere')] for o in sphere_objs: o.select=True bpy.context.scene.objects.active=bpy.data.objects['Sphere'] bpy.ops.object.join() sphere=bpy.data.objects['Sphere'] bpy.context.scene.objects.active=cube bpy.ops.object.modifier_add(type='BOOLEAN') bpy.context.object.modifiers['Boolean'].operation='DIFFERENCE' bpy.context.object.modifiers['Boolean'].object = sphere bpy.ops.object.modifier_apply(apply_as='DATA', modifier='Boolean') bpy.context.scene.objects.active=sphere bpy.ops.object.delete()
実行するとサイコロになります。
コメント