Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода - [4]
> # Поза второй остнастки
> poseTable2 = [
> ('Base', 'X', 90),
> ('Mid2', 'Z', 45),
> ('Tip', 'Y', -45)
> ]
> poseRig(straight, poseTable2)
> # Поза первой остнастки
> poseTable1 = [
> ('Tip', 'Y', 45),
> ('Mid', 'Y', 45),
> ('Base', 'Y', 45)
> ]
> poseRig(bent, poseTable1)
> return
>if __name__ == "__main__":
> run((0,5,0))
Эта программа добавляет арматуру и меш. Арматура имеет три кости (Base (базовая), Mid (средняя), Tip (конечная)) и ограничения:
1. Ограничение IK Mid -> Tip.
2. Ограничение Stretch To Mid -> Tip.
3. Ограничение Copy Rotation Base -> Tip.
Меш деформируется арматурой. Следовательно, создаются модификатор арматуры и соответствующие группы вершин.
>#----------------------------------------------------------
># File rigged_mesh.py
>#----------------------------------------------------------
>import bpy, mathutils
>def createArmature(origin):
> # Создание арматуры и объекта
> amt = bpy.data.armatures.new('MyRigData')
> rig = bpy.data.objects.new('MyRig', amt)
> rig.location = origin
> rig.show_x_ray = True amt.show_names = True
> # Привязка объекта к сцене
> scn = bpy.context.scene
> scn.objects.link(rig)
> scn.objects.active = rig scn.update()
> # Создание костей
>#next two lines by PKHG SVN 36504 W32
> bpy.ops.object.editmode_toggle()
># bpy.ops.object.mode_set(mode='EDIT')
>#original does not work??!! bpy.ops.object.mode_set(mode='EDIT')
> base = amt.edit_bones.new('Base')
> base.head = (0,0,0)
> base.tail = (0,0,1)
> mid = amt.edit_bones.new('Mid')
> mid.head = (0,0,1)
> mid.tail = (0,0,2)
> mid.parent = base
> mid.use_connect = True
> tip = amt.edit_bones.new('Tip')
> tip.head = (0,0,2)
> tip.tail = (0,0,3)
> # Ограничения костей. Арматура должна быть в режиме позы.
> bpy.ops.object.mode_set(mode='POSE')
> # Ограничение IK Mid -> Tip
> pMid = rig.pose.bones['Mid']
> cns1 = pMid.constraints.new('IK')
> cns1.name = 'Ik'
> cns1.target = rig
> cns1.subtarget = 'Tip'
> cns1.chain_count = 1
> # Ограничение StretchTo Mid -> Tip с влиянием 0.5
> cns2 = pMid.constraints.new('STRETCH_TO')
> cns2.name = 'Stretchy'
> cns2.target = rig
> cns2.subtarget = 'Tip'
> cns2.influence = 0.5
> cns2.keep_axis = 'PLANE_X'
> cns2.volume = 'VOLUME_XZX'
> # Ограничение Copy rotation Base -> Tip
> pBase = rig.pose.bones['Base']
> cns3 = pBase.constraints.new('COPY_ROTATION')
> cns3.name = 'Copy_Rotation'
> cns3.target = rig
> cns3.subtarget = 'Tip'
> cns3.owner_space = 'WORLD'
> cns3.target_space = 'WORLD'
> bpy.ops.object.mode_set(mode='OBJECT')
> return rig
>def createMesh(origin):
> # Создание меша и объекта
> me = bpy.data.meshes.new('Mesh')
> ob = bpy.data.objects.new('MeshObject', me)
> ob.location = origin
> # Привязка объекта к сцене
> scn = bpy.context.scene
> scn.objects.link(ob)
> scn.objects.active = ob
> scn.update()
> # Список координат вершин.
> verts = [
> (0.5, 0.5,0), (0.5,-0.5,0), (-0.5,-0.5,0), (-0.5,0.5,0),
> (0.5,0.5,1), (0.5,-0.5,1), (-0.5,-0.5,1), (-0.5,0.5,1),
> (-0.5,0.5,2), (-0.5,-0.5,2), (0.5,-0.5,2), (0.5,0.5,2),
> (0.5,0.5,3), (0.5,-0.5,3), (-0.5,-0.5,3), (-0.5, 0.5,3)
> ]
> # Список граней.
> faces = [
> (0, 1, 2, 3),
> (0, 4, 5, 1),
> (1, 5, 6, 2),
> (2, 6, 7, 3),
> (4, 0, 3, 7),
> (4, 7, 8, 11),
> (7, 6, 9, 8),
> (6, 5, 10, 9),
> (5, 4, 11, 10),
> (10, 11, 12, 13),
> (9, 10, 13, 14),
> (8, 9, 14, 15),
> (11, 8, 15, 12),
> (12, 15, 14, 13)
> ]
> # Создание меша из передаваемых списков вершин, рёбер, граней.
> # Или рёбра или грани должны быть [], иначе Вам нужны проблемы
> me.from_pydata(verts, [], faces)
> # Обновление меша с новыми данными
> me.update(calc_edges=True)
> return ob
>def skinMesh(ob, rig):
> # Списки вершин в группах, в форме (вершина, вес)
> vgroups = {}
> vgroups['Base'] = [
> (0, 1.0), (1, 1.0), (2, 1.0), (3, 1.0),
> (4, 0.5), (5, 0.5), (6, 0.5), (7, 0.5)]
> vgroups['Mid'] = [
> (4, 0.5), (5, 0.5), (6, 0.5), (7, 0.5),
> (8, 1.0), (9, 1.0), (10, 1.0), (11, 1.0)]
> vgroups['Tip'] = [
>(12, 1.0), (13, 1.0), (14, 1.0), (15, 1.0)]
> # Создание групп вершин и добавление вершин и весов
> # Первый аргумент в назначении — список, чтобы можно
> # было назначать несколько вершин сразу
> for name in vgroups.keys():
> grp = ob.vertex_groups.new(name)
> for (v, w) in vgroups[name]:
> grp.add([v], w, 'REPLACE')
> # Добавление меш-объекту модификатора арматуры, с использованием
> # групп вершин, а не envelopes
> mod = ob.modifiers.new('MyRigModif', 'ARMATURE')
> mod.object = rig mod.use_bone_envelopes = False
> mod.use_vertex_groups = True
> return
>def run(origin):
> rig = createArmature(origin)
> ob = createMesh(origin)
> skinMesh(ob, rig)
> # Перемещение и вращение кости Tip в режиме позы
> bpy.context.scene.objects.active = rig
> bpy.ops.object.mode_set(mode='POSE')
> ptip = rig.pose.bones['Tip']
> ptip.location = (0.2,-0.5,0)

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

Что такое ГЕЙМДИЗАЙН? Это не код, графика или звук. Это не создание персонажей или раскрашивание игрового поля. Геймдизайн – это симулятор мечты, набор правил, благодаря которым игра оживает. Как создать игру, которую полюбят, от которой не смогут оторваться? Знаменитый геймдизайнер Тайнан Сильвестр на примере кейсов из самых популярных игр рассказывает как объединить эмоции и впечатления, игровую механику и мотивацию игроков. Познакомитесь с принципами дизайна, которыми пользуются ведущие студии мира! Создайте игровую механику, вызывающую эмоции и обеспечивающую разнообразие.

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

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

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

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