Введение в написание скриптов на Питоне для Блендера 2.5x. Примеры кода - [6]
Примитив не обязан быть особенно простым; есть примитивы для создания меша обезьяны или человеческая оснастка. Но метод примитивов всегда ограничен заготовленными объектами.
Мы используем все три метода в примерах в этой заметке.
>#----------------------------------------------------------
># File objects.py
>#----------------------------------------------------------
>import bpy
>import mathutils
>from mathutils import Vector
>def createMeshFromData(name, origin, verts, faces):
> # Создание меша и объекта
> me = bpy.data.meshes.new(name+'Mesh')
> ob = bpy.data.objects.new(name, me)
> ob.location = origin ob.show_name = True
> # Привязка объекта к сцене, он становится активным
> scn = bpy.context.scene
> scn.objects.link(ob)
> scn.objects.active = ob
> ob.select = True
> # Создание меша из полученных verts (вершин), faces (граней).
> me.from_pydata(verts, [], faces)
> # Обновление меша с новыми данными
> me.update()
> return ob
>def createMeshFromOperator(name, origin, verts, faces):
> bpy.ops.object.add(
> type='MESH',
> enter_editmode=False,
> location=origin)
> ob = bpy.context.object
> ob.name = name
> ob.show_name = True
> me = ob.data me.name = name+'Mesh'
> # Создание меша из полученных verts (вершин), faces (граней).
> me.from_pydata(verts, [], faces)
> # Обновление меша с новыми данными
> me.update()
> # Установка режима объектов
> bpy.ops.object.mode_set(mode='OBJECT')
> return ob
>def createMeshFromPrimitive(name, origin):
> bpy.ops.mesh.primitive_cone_add(
> vertices=4,
> radius=1,
> depth=1,
> cap_end=True,
> view_align=False,
> enter_editmode=False,
> location=origin,
> rotation=(0, 0, 0))
> ob = bpy.context.object
> ob.name = name
> ob.show_name = True
> me = ob.data
> me.name = name+'Mesh'
> return ob
>def createArmatureFromData(name, origin):
> # Создание меша и объекта
> amt = bpy.data.armatures.new(name+'Amt')
> ob = bpy.data.objects.new(name, amt)
> ob.location = origin
> ob.show_name = True
> # Привязка объекта к сцене, он становится активным
> scn = bpy.context.scene
> scn.objects.link(ob)
> scn.objects.active = ob
> ob.select = True
> # Создание одиночной кости
> bpy.ops.object.mode_set(mode='EDIT')
> bone = amt.edit_bones.new('Bone')
> bone.head = (0,0,0)
> bone.tail = (0,0,1)
> bpy.ops.object.mode_set(mode='OBJECT')
> return ob
>def createArmatureFromOperator(name, origin):
> bpy.ops.object.add(
> type='ARMATURE',
> enter_editmode=True,
> location=origin)
> ob = bpy.context.object
> ob.name = name
> ob.show_name = True
> amt = ob.data
> amt.name = name+'Amt'
> # Создание одиночной кости
> bone = amt.edit_bones.new('Bone')
> bone.head = (0,0,0)
> bone.tail = (0,0,1)
> bpy.ops.object.mode_set(mode='OBJECT')
> return ob
>def createArmatureFromPrimitive(name, origin):
> bpy.ops.object.armature_add()
> bpy.ops.transform.translate(value=origin)
> ob = bpy.context.object
> ob.name = name
> ob.show_name = True
> amt = ob.data
> amt.name = name+'Amt'
> return ob
>def run(origo):
> origin = Vector(origo)
> (x,y,z) = (0.707107, 0.258819, 0.965926)
> verts = ((x,x,-1), (x,-x,-1), (-x,-x,-1), (-x,x,-1), (0,0,1))
> faces = ((1,0,4), (4,2,1), (4,3,2), (4,0,3), (0,1,2,3))
> cone1 = createMeshFromData('DataCone', origin, verts, faces)
> cone2 = createMeshFromOperator('OpsCone', origin+Vector((0,2,0)), verts, faces)
> cone3 = createMeshFromPrimitive('PrimCone', origin+Vector((0,4,0)))
> rig1 = createArmatureFromData('DataRig', origin+Vector((0,6,0)))
> rig2 = createArmatureFromOperator('OpsRig', origin+Vector((0,8,0)))
> rig3 = createArmatureFromPrimitive('PrimRig', origin+Vector((0,10,0)))
> return
>if __name__ == "__main__":
> run((0,0,0))
Материалы и текстуры
Эта программа добавляет красный непрозрачный материал, и синий полупрозрачный, и назначает их, соответственно, кубу и сфере.
>#----------------------------------------------------------
># File material.py
>#----------------------------------------------------------
>import bpy
>def makeMaterial(name, diffuse, specular, alpha):
> mat = bpy.data.materials.new(name)
> mat.diffuse_color = diffuse
> mat.diffuse_shader = 'LAMBERT'
> mat.diffuse_intensity = 1.0
> mat.specular_color = specular
> mat.specular_shader = 'COOKTORR'
> mat.specular_intensity = 0.5
> mat.alpha = alpha
> mat.ambient = 1
> return mat
>def setMaterial(ob, mat):
> me = ob.data
> me.materials.append(mat)
>def run(origin):
> # Создание двух материалов
> red = makeMaterial('Red', (1,0,0), (1,1,1), 1)
> blue = makeMaterial('BlueSemi', (0,0,1), (0.5,0.5,0), 0.5)
> # Создание синего куба
> bpy.ops.mesh.primitive_cube_add(location=origin)
> setMaterial(bpy.context.object, red)
> # и красной сферы
> bpy.ops.mesh.primitive_uv_sphere_add(location=origin)
> bpy.ops.transform.translate(value=(1,0,0)
>)
> setMaterial(bpy.context.object, blue)
>if __name__ == "__main__":
> run((0,0,0))
Эта программа создает материал с двумя текстурами: текстура image, отображаемая на цвет и альфу, и процедурная bump-текстура.
Разработчику часто требуется много сторонних инструментов, чтобы создавать и поддерживать проект. Система Git — один из таких инструментов и используется для контроля промежуточных версий вашего приложения, позволяя вам исправлять ошибки, откатывать к старой версии, разрабатывать проект в команде и сливать его потом. В книге вы узнаете об основах работы с Git: установка, ключевые команды, gitHub и многое другое.В книге рассматриваются следующие темы:основы Git;ветвление в Git;Git на сервере;распределённый Git;GitHub;инструменты Git;настройка Git;Git и другие системы контроля версий.
Рассмотрено все необходимое для разработки, компиляции, отладки и запуска приложений Java. Изложены практические приемы использования как традиционных, так и новейших конструкций объектно-ориентированного языка Java, графической библиотеки классов Swing, расширенной библиотеки Java 2D, работа со звуком, печать, способы русификации программ. Приведено полное описание нововведений Java SE 7: двоичная запись чисел, строковые варианты разветвлений, "ромбовидный оператор", NIO2, новые средства многопоточности и др.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
В книге рассказывается история главного героя, который сталкивается с различными проблемами и препятствиями на протяжении всего своего путешествия. По пути он встречает множество второстепенных персонажей, которые играют важные роли в истории. Благодаря опыту главного героя книга исследует такие темы, как любовь, потеря, надежда и стойкость. По мере того, как главный герой преодолевает свои трудности, он усваивает ценные уроки жизни и растет как личность.
Python - объектно-ориентированный язык сверхвысокого уровня. Python, в отличии от Java, не требует исключительно объектной ориентированности, но классы в Python так просто изучить и так удобно использовать, что даже новые и неискушенные пользователи быстро переходят на ОО-подход.