» » » Thomas Larsson - Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода


Авторские права

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

Здесь можно скачать бесплатно "Thomas Larsson - Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода" в формате fb2, epub, txt, doc, pdf. Жанр: Программирование. Так же Вы можете читать книгу онлайн без регистрации и SMS на сайте LibFox.Ru (ЛибФокс) или прочесть описание и ознакомиться с отзывами.
Thomas Larsson - Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода
Рейтинг:
Название:
Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода
Автор:
Издательство:
неизвестно
Год:
неизвестен
ISBN:
нет данных
Скачать:

99Пожалуйста дождитесь своей очереди, идёт подготовка вашей ссылки для скачивания...

Скачивание начинается... Если скачивание не началось автоматически, пожалуйста нажмите на эту ссылку.

Вы автор?
Жалоба
Все книги на сайте размещаются его пользователями. Приносим свои глубочайшие извинения, если Ваша книга была опубликована без Вашего на то согласия.
Напишите нам, и мы в срочном порядке примем меры.

Как получить книгу?
Оплатили, но не знаете что делать дальше? Инструкция.

Описание книги "Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода"

Описание и краткое содержание "Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода" читать бесплатно онлайн.



Третье издание, расширенное и обновлённое для Blender 2.57






    # Создание словаря с графиком 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

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


    for n in range(26):

        pbase.keyframe_insert(

            'rotation_euler',

            index=0,

            frame=n,

            group='Base')

        ptip.keyframe_insert(

            'rotation_euler',

            index=2,

            frame=n,

            group='Tip')


    # Получение FCurves из вновь созданного действия

    action = ob.animation_data.action

    fcus = {}

    for fcu in action.fcurves:

        bone = fcu.data_path.split('"')[1]

        fcus[(bone, fcu.array_index)] = fcu


    # Модификация ключевых точек

    baseKptsRotX = fcus[('Base', 0)].keyframe_points

    tipKptsRotZ = fcus[('Tip', 2)].keyframe_points


    omega = 2*math.pi/250

    for n in range(26):

        t = 10*n

        phi = omega*t

        kp = baseKptsRotX[n]

        kp.co = (t+1,phi+0.7*math.sin(phi))

        kp.interpolation = 'LINEAR'

        kp = tipKptsRotZ[n]

        kp.co = (t+1, -3*phi+2.7*math.cos(2*phi))

        kp.interpolation = 'LINEAR'


    # Вычисление путей для поз костей

    bpy.ops.pose.select_all(action='SELECT')

    bpy.ops.pose.paths_calculate()

    return 


if __name__ == "__main__":

    run((10,0,0))

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


Присвоение отношений родитель-потомок

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



#----------------------------------------------------------

# File epicycle.py

#----------------------------------------------------------

import bpy

import math from math

import pi  


def createEpiCycle(origin):

    periods = [1, 5, 8, 17]

    radii = [1.0, 0.3, 0.5, 0.1]

    axes = [0, 2, 1, 0]

    phases = [0, pi/4, pi/2, 0]


    # Добавление пустышек

    scn = bpy.context.scene

    empties = []

    nEmpties = len(periods)

    for n in range(nEmpties):

        empty = bpy.data.objects.new('Empty_%d' % n, None)

        scn.objects.link(empty)

        empties.append(empty)


    # Назначение каждой пустышке родителя последовательно

    for n in range(1, nEmpties):

        empties[n].parent = empties[n-1]

        empties[n].location = (0, radii[n-1], 0)


    # Вставка двух ключевых кадров для каждой пустышки

    for n in range(nEmpties):

        empty = empties[n]

        empty.keyframe_insert(

            'rotation_euler',

            index=axes[n],

            frame=0,

            group=empty.name)

        empty.keyframe_insert(

            'rotation_euler',

            index=axes[n],

            frame=periods[n],

            group=empty.name)

        fcu = empty.animation_data.action.fcurves[0]

        print(empty, fcu.data_path, fcu.array_index)


    kp0 = fcu.keyframe_points[0]

    kp0.co = (0, phases[n])

    kp0.interpolation = 'LINEAR'

    kp1 = fcu.keyframe_points[1]

    kp1.co = (250.0/periods[n], 2*pi + phases[n])

    kp1.interpolation = 'LINEAR'

    fcu.extrapolation = 'LINEAR'


    last = empties[nEmpties-1]

    bpy.ops.mesh.primitive_ico_sphere_add(

        size = 0.2,

        location=last.location)

    ob = bpy.context.object

    ob.parent = last


    empties[0].location = origin

    return 


def run(origin):

    createEpiCycle(origin)

    bpy.ops.object.paths_calculate()

    return 


if __name__ == "__main__":

    run((0,0,0))

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


Управляющие элементы (Drivers)

Эта программа добавляет арматуру с одной управляющей костью и двумя управляемыми костями. Вращение Конца (tip) по Z управляется позицией по X управляющей кости. Вращение Базы (base) по Z управляется как позицией по Y, так и вращением по Z управляющей кости.



#----------------------------------------------------------

# File driver.py

#----------------------------------------------------------

import bpy 


def run(origin):

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

    amt = bpy.data.armatures.new('MyRigData')

    rig = bpy.data.objects.new('MyRig', amt)

    rig.location = origin

    amt.show_names = True

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

    scn = bpy.context.scene

    scn.objects.link(rig)

    scn.objects.active = rig

    scn.update()


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

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

    base = amt.edit_bones.new('Base')

    base.head = (0,0,0)

    base.tail = (0,0,1)


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

    tip.head = (0,0,1)

    tip.tail = (0,0,2)

    tip.parent = base

    tip.use_connect = True


    driver = amt.edit_bones.new('Driver')

    driver.head = (2,0,0)

    driver.tail = (2,0,1)


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


    # Добавление управляющего элемента для вращения по Z кости Tip

    # Tip.rotz = 1.0 - 1.0*x, где x = Driver.locx

    fcurve = rig.pose.bones["Tip"].driver_add('rotation_quaternion', 3)

    drv = fcurve.driver

    drv.type = 'AVERAGE'

    drv.show_debug_info = True


    var = drv.variables.new()

    var.name = 'x'

    var.type = 'TRANSFORMS'


    targ = var.targets[0]

    targ.id = rig

    targ.transform_type = 'LOC_X'

    targ.bone_target = 'Driver'

    targ.use_local_space_transform = True


    fmod = fcurve.modifiers[0]

    fmod.mode = 'POLYNOMIAL'

    fmod.poly_order = 1

    fmod.coefficients = (1.0, -1.0)


    # Добавление управляющего элемента для вращения по Z кости Base

    # Base.rotz = z*z - 3*y, где y = Driver.locy и z = Driver.rotz

    fcurve = rig.pose.bones["Base"].driver_add('rotation_quaternion', 3)

    drv = fcurve.driver

    drv.type = 'SCRIPTED'

    drv.expression = 'z*z - 3*y'

    drv.show_debug_info = True


    var1 = drv.variables.new()


На Facebook В Твиттере В Instagram В Одноклассниках Мы Вконтакте
Подписывайтесь на наши страницы в социальных сетях.
Будьте в курсе последних книжных новинок, комментируйте, обсуждайте. Мы ждём Вас!

Похожие книги на "Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода"

Книги похожие на "Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода" читать онлайн или скачать бесплатно полные версии.


Понравилась книга? Оставьте Ваш комментарий, поделитесь впечатлениями или расскажите друзьям

Все книги автора Thomas Larsson

Thomas Larsson - все книги автора в одном месте на сайте онлайн библиотеки LibFox.

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Отзывы о "Thomas Larsson - Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода"

Отзывы читателей о книге "Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода", комментарии и мнения людей о произведении.

А что Вы думаете о книге? Оставьте Ваш отзыв.