Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода - [6]

Шрифт
Интервал

Примитив не обязан быть особенно простым; есть примитивы для создания меша обезьяны или человеческая оснастка. Но метод примитивов всегда ограничен заготовленными объектами.

Мы используем все три метода в примерах в этой заметке.



>#----------------------------------------------------------

># File objects.py

>#----------------------------------------------------------

>import bpy

>import mathutils

>from mathutils import Vector 


>def createMeshFromData(name, origin, verts, faces):

>    # Создание меша и объекта

>    me = bpy.data.meshes.new(name+'Mesh')

>    ob = bpy.data.objects.new(name, me)

>    ob.location = origin ob.show_name = True


>    # Привязка объекта к сцене, он становится активным

>    scn = bpy.context.scene

>    scn.objects.link(ob)

>    scn.objects.active = ob

>    ob.select = True


>    # Создание меша из полученных verts (вершин), faces (граней).

>    me.from_pydata(verts, [], faces)

>    # Обновление меша с новыми данными

>    me.update()

>    return ob 


>def createMeshFromOperator(name, origin, verts, faces):

>    bpy.ops.object.add(

>        type='MESH',

>        enter_editmode=False,

>        location=origin)

>    ob = bpy.context.object

>    ob.name = name

>    ob.show_name = True

>    me = ob.data me.name = name+'Mesh'


>    # Создание меша из полученных verts (вершин), faces (граней).

>    me.from_pydata(verts, [], faces)

>    # Обновление меша с новыми данными

>    me.update()

>    # Установка режима объектов

>    bpy.ops.object.mode_set(mode='OBJECT')

>    return ob 


>def createMeshFromPrimitive(name, origin):

>    bpy.ops.mesh.primitive_cone_add(

>        vertices=4,

>        radius=1,

>        depth=1,

>        cap_end=True,

>        view_align=False,

>        enter_editmode=False,

>        location=origin,

>        rotation=(0, 0, 0))


>    ob = bpy.context.object

>    ob.name = name

>    ob.show_name = True

>    me = ob.data

>    me.name = name+'Mesh'

>    return ob 


>def createArmatureFromData(name, origin):

>    # Создание меша и объекта

>    amt = bpy.data.armatures.new(name+'Amt')

>    ob = bpy.data.objects.new(name, amt)

>    ob.location = origin

>    ob.show_name = True


>    # Привязка объекта к сцене, он становится активным

>    scn = bpy.context.scene

>    scn.objects.link(ob)

>    scn.objects.active = ob

>    ob.select = True


>    # Создание одиночной кости

>    bpy.ops.object.mode_set(mode='EDIT')

>    bone = amt.edit_bones.new('Bone')

>    bone.head = (0,0,0)

>    bone.tail = (0,0,1)

>    bpy.ops.object.mode_set(mode='OBJECT')

>    return ob 


>def createArmatureFromOperator(name, origin):

>    bpy.ops.object.add(

>        type='ARMATURE',

>        enter_editmode=True,

>        location=origin)

>    ob = bpy.context.object

>    ob.name = name

>    ob.show_name = True

>    amt = ob.data

>    amt.name = name+'Amt'


>    # Создание одиночной кости

>    bone = amt.edit_bones.new('Bone')

>    bone.head = (0,0,0)

>    bone.tail = (0,0,1)

>    bpy.ops.object.mode_set(mode='OBJECT')

>    return ob 


>def createArmatureFromPrimitive(name, origin):

>    bpy.ops.object.armature_add()

>    bpy.ops.transform.translate(value=origin)

>    ob = bpy.context.object

>    ob.name = name

>    ob.show_name = True

>    amt = ob.data

>    amt.name = name+'Amt'

>    return ob 


>def run(origo):

>    origin = Vector(origo)

>    (x,y,z) = (0.707107, 0.258819, 0.965926)

>    verts = ((x,x,-1), (x,-x,-1), (-x,-x,-1), (-x,x,-1), (0,0,1))

>    faces = ((1,0,4), (4,2,1), (4,3,2), (4,0,3), (0,1,2,3))


>    cone1 = createMeshFromData('DataCone', origin, verts, faces)

>    cone2 = createMeshFromOperator('OpsCone', origin+Vector((0,2,0)), verts, faces)

>    cone3 = createMeshFromPrimitive('PrimCone', origin+Vector((0,4,0)))


>    rig1 = createArmatureFromData('DataRig', origin+Vector((0,6,0)))

>    rig2 = createArmatureFromOperator('OpsRig', origin+Vector((0,8,0)))

>    rig3 = createArmatureFromPrimitive('PrimRig', origin+Vector((0,10,0)))

>    return 


>if __name__ == "__main__":

>    run((0,0,0))



Материалы и текстуры

Материалы

Эта программа добавляет красный непрозрачный материал, и синий полупрозрачный, и назначает их, соответственно, кубу и сфере.



>#----------------------------------------------------------

># File material.py

>#----------------------------------------------------------

>import bpy 

>def makeMaterial(name, diffuse, specular, alpha):

>    mat = bpy.data.materials.new(name)

>    mat.diffuse_color = diffuse

>    mat.diffuse_shader = 'LAMBERT'

>    mat.diffuse_intensity = 1.0

>    mat.specular_color = specular

>    mat.specular_shader = 'COOKTORR'

>    mat.specular_intensity = 0.5

>    mat.alpha = alpha

>    mat.ambient = 1

>    return mat 


>def setMaterial(ob, mat):

>    me = ob.data

>    me.materials.append(mat)  


>def run(origin):

>    # Создание двух материалов

>    red = makeMaterial('Red', (1,0,0), (1,1,1), 1)

>    blue = makeMaterial('BlueSemi', (0,0,1), (0.5,0.5,0), 0.5)


>    # Создание синего куба

>    bpy.ops.mesh.primitive_cube_add(location=origin)

>    setMaterial(bpy.context.object, red)


>    # и красной сферы

>    bpy.ops.mesh.primitive_uv_sphere_add(location=origin)

>    bpy.ops.transform.translate(value=(1,0,0)>)

>    setMaterial(bpy.context.object, blue)  


>if __name__ == "__main__":

>   run((0,0,0))


Текстуры

Эта программа создает материал с двумя текстурами: текстура image, отображаемая на цвет и альфу, и процедурная bump-текстура.


Рекомендуем почитать
Изучаем Java EE 7

Java Enterprise Edition (Java EE) остается одной из ведущих технологий и платформ на основе Java. Данная книга представляет собой логичное пошаговое руководство, в котором подробно описаны многие спецификации и эталонные реализации Java EE 7. Работа с ними продемонстрирована на практических примерах. В этом фундаментальном издании также используется новейшая версия инструмента GlassFish, предназначенного для развертывания и администрирования примеров кода. Книга написана ведущим специалистом по обработке запросов на спецификацию Java EE, членом наблюдательного совета организации Java Community Process (JCP)


Геймдизайн. Рецепты успеха лучших компьютерных игр от Super Mario и Doom до Assassin’s Creed и дальше

Что такое ГЕЙМДИЗАЙН? Это не код, графика или звук. Это не создание персонажей или раскрашивание игрового поля. Геймдизайн – это симулятор мечты, набор правил, благодаря которым игра оживает. Как создать игру, которую полюбят, от которой не смогут оторваться? Знаменитый геймдизайнер Тайнан Сильвестр на примере кейсов из самых популярных игр рассказывает как объединить эмоции и впечатления, игровую механику и мотивацию игроков. Познакомитесь с принципами дизайна, которыми пользуются ведущие студии мира! Создайте игровую механику, вызывающую эмоции и обеспечивающую разнообразие.


Обработка событий в С++

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


MFC и OpenGL

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Симуляция частичной специализации

В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.


Питон — модули, пакеты, классы, экземпляры

Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.