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

Тут можно читать онлайн Thomas Larsson - Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-programming. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода
  • Автор:
  • Жанр:
  • Издательство:
    неизвестно
  • Год:
    неизвестен
  • ISBN:
    нет данных
  • Рейтинг:
    4/5. Голосов: 91
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

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

Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода - описание и краткое содержание, автор Thomas Larsson, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

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

Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода - читать онлайн бесплатно полную версию (весь текст целиком)

Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода - читать книгу онлайн бесплатно, автор Thomas Larsson
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

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()

var1.name = 'y'

var1.type = 'TRANSFORMS'

targ1 = var1.targets[0]

targ1.id = rig

targ1.transform_type = 'LOC_Y'

targ1.bone_target = 'Driver'

targ1.use_local_space_transform = True

var2 = drv.variables.new()

var2.name = 'z'

var2.type = 'TRANSFORMS'

targ2 = var2.targets[0]

targ2.id = rig

targ2.transform_type = 'ROT_Z'

targ2.bone_target = 'Driver'

targ2.use_local_space_transform = True

return

if __name__ == "__main__":

run((0,0,0))

Другие типы данных

Текст

Эта программа добавляет текстовый объект в 3D-пространство и устанавливает некоторые атрибуты. Заметьте, что тип данных здесь используется TextCurve ; тип Text применяется для текста в текстовом редакторе.

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

# File text.py

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

import bpy

import math from math

import pi

def run(origin):

# Создание и именование объекта TextCurve

bpy.ops.object.text_add(

location=origin,

rotation=(pi/2,0,pi))

ob = bpy.context.object

ob.name = 'HelloWorldText'

tcu = ob.data

tcu.name = 'HelloWorldData'

# Атрибуты TextCurve

tcu.body = "Hello, world"

tcu.font = bpy.data.fonts[0]

tcu.offset_x = -9

tcu.offset_y = -0.25

tcu.shear = 0.5

tcu.size = 3

tcu.space_character = 2

tcu.space_word = 4

# Унаследованные атрибуты Curve (Кривая)

tcu.extrude = 0.2

tcu.use_fill_back = True

tcu.use_fill_deform = True

tcu.use_fill_front = True

if __name__ == "__main__":

run((0,0,0))

Слои

Эта программа иллюстрирует три метода установки объекта на новом слое:

1. Создать его на правильном слое.

2. Создать его в слое 1, и изменить Object.layer.

3. Создать его в слое 1, и использовать оператор для его перемещения.

Также показано, как изменять видимость слоёв.

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

# File layers.py

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

import bpy

def createOnLayer(mat):

for n in range(3, 8):

# Создание n-угольника в слое n+11

layers = 20*[False]

layers[n+11] = True

bpy.ops.mesh.primitive_circle_add(

vertices=n,

radius=0.5,

fill=True,

view_align=True,

layers=layers,

location=(n-3,0,0)

)

bpy.context.object.data.materials.append(mat)

return

def changeLayerData(mat):

for n in range(3, 8):

# Создание n-угольника в слое 1

bpy.ops.mesh.primitive_circle_add(

vertices=n,

radius=0.5,

fill=True,

view_align=True,

location=(n-3,1,0)

)

bpy.context.object.data.materials.append(mat)

# Затем перемещение его на новый слой

ob = bpy.context.object

ob.layers[n+11] = True

# Удаление его из других слоев.

layers = 20*[False]

layers[n+11] = True

for m in range(20):

ob.layers[m] = layers[m]

return

def moveLayerOperator(mat):

for n in range(3, 8):

# Создание n-угольника в слое 1

bpy.ops.mesh.primitive_circle_add(

vertices=n,

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Thomas Larsson читать все книги автора по порядку

Thomas Larsson - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




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


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


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

Напишите свой комментарий
x