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

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


Рекомендуем почитать
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 так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.