Введение в написание скриптов на Питоне для Блендера 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-текстура.


Рекомендуем почитать
Pro Git

Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.


Java 7

Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.


MFC и OpenGL

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


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

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


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

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


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

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