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

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


>   # Второй текстурный слой: проекция спереди (UVFront)

>    texFaces = [

>        [(0.732051,0), (1,0), (0.541778,1)],

>        [(0.541778,1), (0,0), (0.732051,0)],

>        [(0.541778,1), (1,0), (0,0)],

>        [(1,0), (0.732051,0), (0,0)]

>    ]

>    uvFront = createTextureLayer("UVFront", me, texFaces)


>    # Третий текстурный слой: Умная проекция

>    bpy.ops.mesh.uv_texture_add()

>    uvCyl = me.uv_textures.active

>    uvCyl.name = 'UVCyl'

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

>    bpy.ops.uv.cylinder_project()

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


># Хотим сделать Главный слой активным, но, кажется, это не работает - TBF

>    me.uv_textures.active = uvMain

>    me.uv_texture_clone = uvMain

>    uvMain.active_render = True

>    uvFront.active_render = False

>    uvCyl.active_render = False

>    return ob 


>def createTextureLayer(name, me, texFaces):

>    uvtex = me.uv_textures.new()

>    uvtex.name = name

>    for n,tf in enumerate(texFaces):

>        datum = uvtex.data[n]

>        datum.uv1 = tf[0]

>        datum.uv2 = tf[1]

>        datum.uv3 = tf[2]

>    return uvtex 


>def createMaterial():

>    # Создание текстуры image из картинки. Измените здесь, если

>    # каталог snippet расположен не в Вашем домашнем каталоге.

>     realpath = os.path.expanduser('~/snippets/textures/color.png')

>    tex = bpy.data.textures.new('ColorTex', type = 'IMAGE')

>    tex.image = bpy.data.images.load(realpath)

>    tex.use_alpha = True 


>    # Создание незатеняемого материала и MTex

>    mat = bpy.data.materials.new('TexMat')

>    mat.use_shadeless = True

>    mtex = mat.texture_slots.add()

>    mtex.texture = tex

>    mtex.texture_coords = 'UV'

>    mtex.use_map_color_diffuse = True

>    return mat 


>def run(origin):

>    ob = createMesh(origin)

>    mat = createMaterial()

>    ob.data.materials.append(mat)

>    return 


>if __name__ == "__main__":

>    run((0,0,0))



Действия (Actions) и управляющие элементы (drivers)

Действие объекта

Прыгающий мяч.



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

># File ob_action.py

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

>import bpy import math 


>def run(origin):

>    # Установка начала и конца анимации

>    scn = bpy.context.scene

>    scn.frame_start = 11

>    scn.frame_end = 200


>    # Создание ico-сферы

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

>    ob = bpy.context.object


>  # Вставка ключевых кадров с operator code (кодом оператора ???)

>    # Объект должен быть выбранным автоматически

>    z = 10

>    t = 1

>    for n in range(5):

>        t += 10

>        bpy.ops.anim.change_frame(frame = t)

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

>        bpy.ops.anim.keyframe_insert_menu(type='Location')

>        t += 10

>        bpy.ops.anim.change_frame(frame = t)

>        bpy.ops.transform.translate(value=(2, 0, -z))

>        bpy.ops.anim.keyframe_insert_menu(type='Location')

>        z *= 0.67


>    action = ob.animation_data.action


>    # Создание словаря с графиком FCurves типа location (позиция)

>    fcus = {}

>    for fcu in action.fcurves:

>        if fcu.data_path == 'location':

>            fcus[fcu.array_index] = fcu

>    print(fcus.items())


>    # Добавление новых ключевых точек к x и z

>    kpts_x = fcus[0].keyframe_points

>    kpts_z = fcus[2].keyframe_points

>    (x0,y0,z0) = origin

>    omega = 2*math.pi/20

>    z *= 0.67

>    for t in range(101, 201):

>        xt = 20 + 0.2*(t-101)

>        zt = z*(1-math.cos(omega*(t - 101)))

>        z *= 0.98

>        kpts_z.insert(t, zt+z0, options={'FAST'})

>    kpts_x.insert(t, xt+x0)


>    # Изменение типа экстраполяции и интерполяции

>    # для кривой X на линейный

>    fcus[0].extrapolation = 'LINEAR'

>    for kp in kpts_x:

>        kp.interpolation = 'LINEAR'


>    # Позиция Y - константа и может быть удалена

>    action.fcurves.remove(fcus[1])

>    bpy.ops.object.paths_calculate()

>    return 


>if __name__ == "__main__":

>    run((0,0,10))

>    bpy.ops.screen.animation_play(reverse=False, sync=False)


Действие позирования костей

Эта программа создает арматуру с двумя костями, которые вращаются по некоторым сложным кривым.



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

># File pose_action.py

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

>import bpy

>import math 


>def run(origin):

>    # Установка начала и конца анимации

>    scn = bpy.context.scene

>    scn.frame_start = 1

>    scn.frame_end = 250


>    # Создание арматуры и объекта

>    bpy.ops.object.armature_add()

>    ob = bpy.context.object

>    amt = ob.data


>    # Переименование первой кости и создание второй кости

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

>    base = amt.edit_bones['Bone']

>    base.name = 'Base'

>    tip = amt.edit_bones.new('Tip')

>    tip.head = (0,0,1)

>    tip.tail = (0,0,2)

>    tip.parent = base

>    tip.use_connect = True


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

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

>    ob.location=origin


>    # Установка Эйлерова режима вращения (Euler ZYX)

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

>    pbase = ob.pose.bones['Base']

>    pbase.rotation_mode = 'ZYX'

>    ptip = ob.pose.bones['Tip']

>    ptip.rotation_mode = 'ZYX'


>    # Вставка 26 ключевых кадров для двух вращений FCurves

>    # Последний ключевой кадр будет вовне дипазона анимации


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

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


Обработка баз данных на Visual Basic.NET

Это практическое руководство разработчика программного обеспечения на Visual Basic .NET и ADO.NET, предназначенное для создания приложений баз данных на основе WinForms, Web-форм и Web-служб. В книге описываются практические способы решения задач доступа к данным, с которыми сталкиваются разработчики на Visual Basic .NET в своей повседневной деятельности. Книга начинается с основных сведений о создании баз данных, использовании языка структурированных запросов SQL и системы управления базами данных Microsoft SQL Server 2000.


Исчерпывающее руководство по написанию всплывающих подсказок

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


MFC и OpenGL

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


Программное обеспечение встроенных систем. Общие требования к разработке и документированию

Embedded system software. General requirements for development and documentationСтандарт подготовлен в развитие ГОСТ Р ИСО/МЭК 12207-99 «Информационная технология. Процессы жизненного цикла программных средств» с целью учета специфики разработки и документирования программного обеспечения встроенных систем реального времени.


Как пасти котов. Наставление для программистов, руководящих другими программистами

«Как пасти котов» – это книга о лидерстве и руководстве, о том, как первое совмещать со вторым. Это, если хотите, словарь трудных случаев управления IT-проектами. Программист подобен кошке, которая гуляет сама по себе. Так уж исторически сложилось. Именно поэтому так непросто быть руководителем команды разработчиков. Даже если вы еще месяц назад были блестящим и дисциплинированным программистом и вдруг оказались в роли менеджера, вряд ли вы знаете, с чего надо начать, какой выбрать стиль руководства, как нанимать и увольнять сотрудников, проводить совещания, добиваться своевременного выполнения задач.