Меню Рубрики

Установка python для blender

Blender: первые шаги в Python

Автор: Olivier Saraja
Перевод на английский язык: Ed Montgomery
Перевод на русский язык: Роман Володин, 2008

Мы благодарны Иву Байи (Yves Bailly) из GNU/Linux Magazine №68, за возможность соединить Blender и Python для разработки графики. Мы собираемся рассмотреть язык описания сцен POV-ray (подробно рассматривался в предыдущих выпусках), чтобы понять как встроенный в Блендер интерпретатор Питона даёт нам не менее широкие возможности, чем полная версия интерпретатора Питона.

Но, прежде всего, как и во всех программах, необходимо определить цель. В рамках изучения Питона, мы просто. попробуем воспроизвести сцену Блендера, которая открывается по умолчанию! Мы будем учиться создавать куб, присваивать ему материал, а затем добавим источник света и камеру. Каждый из этих объектов будет расположен и направлен точно также (в частности, камера и лампа), как в сцене по умолчанию.

Рисунок 1: Выглядит легко? Да, и мы узнаем как.

1.Настройка Питона

Большинство функций, которые я буду описывать, являются встроенными в Python API для Blender. Но в некоторых случаях необходимо иметь полную версию Питона на жестком диске. Есть некоторые модули предоставляемые Питоном, которые нам понадобятся, например модуль math.

1.1 Установка Pythonpath:

Большинство дистрибутивов (очевидно, речь идет о Линуксе — прим. перев.) включают в себя последние версии Питона, возможно он уже установлен, осталось его только настроить. Необходимо указать системе путь к Питону. Для того чтобы определить путь (или пути), есть простой способ. Откройте консоль или терминал и введите команду python, а затем подтвердите, нажав Enter.

Вы только что запустили Питон в консольном режиме. Теперь введите import и print sys.path. Вы увидите что-то вроде этого:

Теперь откройте файл .bashrc из корня вашей домашней директории (/home/my). Добавьте в файл следующие строки:

Примечание о разделителях: (ни апострофов, ни путей, разделенных двоеточиями) это обусловлено командой print sys.path.

1.2 Задание пути по умолчанию для скриптов:

Запустите Blender, и нажмите на иконку, расположенную в нижней части 3D-окна, и выберите User Preferences.

Рисунок 2: Выберите User Preferences

Здесь вы можете настроить окна видов, управление, язык, темы, автосохранение и многое другое. Нас интересует категория File Paths. Щелкните на ней и введите путь к папке, куда вы будете сохранять ваши скрипты.

Рисунок 3: Готово! Путь к скриптам задан

Осталось вернуться в 3D-окно и нажать CtrL+U, чтобы сохранить изменения.

2. Предисловие и основные рекомендации

Я настоятельно рекомендую вам запускать Блендер из консоли или терминала, в этом случае вы сможете увидеть сообщения интерпретатора при выполнении ваших скриптов. В этом случае, если ваш код содержит ошибки, вы сможете их легче найти и исправить их. После запуска Блендера разделите 3D-окно на два, щелкнув правой кнопкой на заголовке внизу окна и выбрав Split Area.

Рисунок 4: Подготовка рабочего пространства

В правой части окна откройте окно текстового редактора (Shift+F11) и создать новый файл с помощью комбинации Alt+N или используйте меню под окном: File > New. Включите нумерацию строк, это будет очень удобно.

Первые несколько строк довольно просты. Прежде всего, создадим «скелет» нашего скрипта:

На данный момент, программа не делает абсолютно ничего. Тем не менее, вы можете выполнить скрипт, нажав комбинацию [Alt]+ [P] (позаботьтесь, чтобы курсор мыши при этом находился в текстовом окне).

3. Создание куба

Было бы здорово, если питон позволил нам выполнить некую команду, например, cube < >, как в случае с POV-Ray. Но мы будем работать не с примитивами, а с компонентами сетки. Мы собираемся проиллюстрировать и снабдить массой комментариев этот простой процесс.

3.1 Создание грани или поверхности

Начнем с простого. Давайте предположим, что мы хотим плоскость как на рисунке 5. Он состоит из 4 точек или вершин, которые объединены вместе, образуя грань. Тогда легко задать координаты четырех вершин. Для удобства назовем их числами от 1 до 4, или вернее от 0 до 3. В действительности, в компьютерных науках, отсчет ведется с 0, а не с 1. Нужно немного практики, чтобы к этому привыкнуть.

Теперь мы легко можем определить нашу поверхности, которая опирается на точки от 0 до 3:

Рисунок 5: Грань состоит из четырех вершин, обозначенные 0 — 3

Теперь мы можем написать следующий код. Первые две строки инициализируют модули Блендера для Питона. Сейчас мы собираемся сосредоточиться на создании сетки, для этого нам нужны функции модуля Nmesh.

В следующей строке мы создаем в памяти объект типа mesh (сетка), но на данный момент он является абсолютно пустым. Мы только зарезервировано место в памяти для него, с именем plandata. Избегайте использования пропусков в именах, иначе это может вызвать ошибку.

Теперь мы определим координаты четырех точек, которые составляют нашу поверхность. Имя vertex, выбранное произвольно, и координаты прилагаемого вектора (Nmesh.Vert) показаны на рисунке 5. В следующей строке мы добавляем в список компонент сетки (plandata) координаты вершин (vertex) в список (Nmesh.Vert). Мы будем повторять эти две строки кода для каждой вершины нашей грани, лишь изменяя координаты. Во внутренней структуре координаты первой вершины расположены в переменной verts [0], второй вершины в verts [1] и т.д. для N-й вершины в диапазоне verts [N-1].

Теперь мы зарезервируем память для грани под простым именем face:

Теперь мы можем определить вершин, которые составляют грань. Это делается просто путем добавления verts [0] — verts [3] в список вершин (v), которые образуют грань face плоскости plandata. В строках ниже только имена face и plandata задаются пользователем, остальные относятся к внутренним функциям и переменным модуля Питон в Блендере.

Вершины, которые составляют нашу грань, определены. Теперь нам надо добавить грань face в список граней объекта plandata.

Всё, сетка полностью определена и построена. Тем не менее, она существует только в память вашего компьютера. Мы собираемся превратить её в геометрию Блендера.

Blender теперь готов отобразить сетку, просто необходимо обновить экран и пользователь будет возвещен о своем успехе.

3.2 Использование циклов

Представьте себе, что я должен описать сетку, состоящую из нескольких сотен граней. Я бы сошел с ума от бесконечных [name.vertex]=NMesh.Vert([coordinates])N[name.data].verts.append[name.vertex]Nx[name.face].v.append([name.data].verts[number.vertex]). Я бы гораздо скорее изобрел инструмент, который бы сделал это за меня. К счастью, у нас есть циклы.

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

Тогда, в момент создания вершин, мы потребуем от Питона не делать их по одной, пройти через вектор list_of_vertices, которые мы определили, и каждую из них поместить в список с именами composante[i].

Дальше мы создадим вершины для объекта plandata.

Внимание

— Не забывайте двоеточие в конце строки for . in . : По сути, это указывает на начало цикла.
— Выдерживайте отступы в циклах и функциях. По ним Питон отличает начало и конец цикла.
— Вы можете поместить цикл в цикл, но помните об отступах! Иначе Питон выдаст ошибку.

3.3 Создание куба

Теперь мы знаем, как определить перечень вершин, а также как использовать циклы для упрощения создания вершин. Теперь все мы должны научиться создавать списки граней и использовать дополнительные циклы для автоматической генерации граней Мы задали координаты вершин куба:

Затем по вершинам построили грани (номера вершин в скобках):

Рисунок 6: Куб состоит из восьми вершин (0-7)

Мы можем обобщить эту информацию: list_of_vertices будет содержит координаты всех точек, а list_of_faces содержит грани:

Как и раньше, мы в памяти создадим сетку, пока пустую. Назовем её CubeMeshData.

А сейчас мы запустим в работу наши волшебные циклы. Для каждой вершины list_of_vertices мы создадим новую вершину, используя координаты для указания её положения. Позже мы можем добавить эту вершину в список вершин сетки.

Мы также собираемся создать цикл для создания граней. Сначала создадим грани из перечисленных в list_of_faces; грань остается в памяти, пока мы не добаывим её вершины. Это будет выполнять второй цикл, заключенный в первый.

Очень просто, да? Но на самом деле, наш объект обладает смехотворно малым числом вершин и граней. Теперь, когда наша сетка окончательно определена, нам нужно передать информацию Блендеру, так чтобы он смог её использовать. Это следующая строка: Блендер из ячеки памяти CubeMeshData создаст объект Cube. Кроме того, последний аргумент указывает, что Блендер должен пересчитать нормали сетки. Эта операция не является обязательной, но мы рекомендуем выполнять её.

3.4 Создание материала

Для определения материала, мы собираемся взглянуть на раздел Shading (F5) чтобы увидеть значения, которые мы собираемся воспроизвести. А затем назначим материал кубу.

Рисунок 7: Свойства материала

Создание материала является относительно простой задачей. Достаточно создать в памяти объект с именем материала, а потом использовать следующую строку, что иметь доступ к материалу в Блендере (вкладка Материалы).

Если материал создан он не используется в данный момент какой-либо сеткой или объектом. Мы собираемся добавить материал «mat» в список материалов CubeMeshData (заметим, что это ограничено 16-ю символами).

Теперь мы собираемся определить некоторые свойства этого материала, начиная с компонентов цвета (R, G и B равны 0.756, чтобы получить светло-серый), альфы материала (1.0, чтобы получить совершенно непрозрачный куб), отражение света (Ref 0,8), ее Specularity (0.5 для средней интенсивности зеркального отражения).

Конечно, число параметров гораздо больше, но нам достаточно этого.

4. Добавляем камеру

Создание камеры еще проще, чем создание куба. Но из-за некоторых особенностей чуть сложнее
создания материала.

Определение текущей сцены:

Мы собираемся приступить к созданию объекта в памяти и дадим ему имя «С». Камера будет перспективная:

Линза равна 35 (хотя можно было оставить значение по умолчанию)

Затем определите имя файла данных для текущей сцены «cur»:

Мы уже фактически создали объект-камеру в Blender. Он будет нести простое название «ob» для объекта, и «Camera» в Blender.

Отныне объект в блендере существует, но надо присоединить его к камере:

А камеру нужно присоединить к сцене:

Камера сначала объявляется как данные, затем как объект, и наконец как камера. Теперь сделаем камеру текущей:

И вуаля, у нас есть камера! Теперь мы должны определить позицию, вращение и масштаб камеры. В данном случае, нас интересует только позиция и вращение. Давайте еще раз посмотрим на сцену. В 3D-окне выбирем камеру и нажмем N. Появится окно Transform Properties, где можно увидеть название объекта «ob» и значения трансформаций.

Рисунок 8: Свойства трансформаций камеры

Базовый синтаксис трансформаций:

setEuler позволяет определить углы вращения объекта в его локальных осях. setLocation определяет положение в мировых осях (относительно сцены). Наконец, setSize позволяет определить пропорции объекта в трех направлениях локальных осей. Имейте в виду, что углы angX, angY и angZ должны быть выражены в радианах.

Так же определяются значения поворотов данного объекта. К сожалению, угол в Питоне должны быть выражен в радианах, хотя в Блендере они выражаются в градусах. Т.е. надо перевести радианы в градусы. Как вы знаете 360 градусов равны 2пи радиан (пи = 3.14159. ), в результате 1 градус = (2пи/360):

В Питоне пи пишется как math.pi, и требует подключения дополнительного модуля — math. Т.к. мы ленивы, определим следующее:

что позволит нам писать следующее преобразование так:

Окончательно код создания камеры выглядит так:

также, в первой строке скрипта должно быть:

5. Добавление лампы

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

[‘type’] тип — может быть ‘Lamp’, ‘Sun’, ‘Spot’, ‘Hemi’, ‘Area’ или ‘Photon’

Если вы выберете тип «Spot», вы сможете установить дополнительные параметры для него.
Например:

создаст источник квадратной формы и включит тени.

Снова зарезервируем место в памяти, назвав его «l»:

Фактическое создание объекта лампы тривиально. В Питоне это просто название «ob» для объекта, и «Lamp» в Блендере.

Объект «ob» теперь существует в Blender, но объект надо связать с нашей лампой:

В свою очередь объект «ob» должны быть связаны с текущей сценой (текущую сцену мы определили ранее — cur):

Наша лампа готова, надо разместить её в сцене. Посмотрим на свойства трансформации лампы.

Следует отметить удивительную деталь: по умолчанию лампа просто нематериальная точка в пространстве, которая служит в качестве источника света. Не обязательно прописывать её свойства. Тем не менее, сделать это необходимо.

Как и ранее, название объекта лампы просто «ob». Как и раньше:

Определение вращения лампы также не сложно:

Окончательный блок кода по созданию лампы:

6. Обзор кода

Мы рассмотрим здесь полный код, который мы видели до настоящего времени по частям, хоть и с нумерацией строк. Вы найдете его на диске к журналу или сайте http://www.linuxgraphic.org под названием blender-default-scene.py и blender-default-scene.blend

7. Заключение

Мы добрались до конца первой статьи. Мы изучили базовый синтаксис, необходимый для получения некоторых типов объектов в Blender. Программирование на Python в Blender является немного более сложным, чем написание кода под POV-Ray, потому что необходимо вызвать внутренние функции Blender, получить результаты, а затем вернуть их в Blender. В конце я приведу несколько полезных ссылок.

источник

Blender для начинающих/Python

— перейти к комбинациям клавиш.
— перейти к первому необязательному для изучения разделу.
— переход к следующей по курсу главе (порядок глав не совпадает с порядком глав по содержанию).
  1. Стандартные движки
    1. ОсновыОписание всего по немногу. После прочтения Вы сможете моделировать в Blender.
    2. МенюРазбирание меню. После изучения этой главы Вы будете быстрее ориентироваться в меню.
    3. МодификаторыОписание модификаторов. После прочтения данной главы Вы сможете плодотворно пользоваться модификаторами в Blender.
    4. Расширенная игровая логикаВ этой главе описывается игровая логика в BGE. В конце прочтения данной главы Вы будете владеть игровой логикой почти на профессиональном уровне.
    5. Ноды в Cycles RenderЗдесь рассказывается о нодах в Blender. В конце прочтения этой главы Вы будете уметь создавать несложные, но красивые материалы.
    6. Ноды в Blender RenderГлава посвящена нодам в старом рендере «Blender Render». После изучения главы Вы будете способны ориентироваться в нодах старого рендера на среднем уровне.
    7. АнимацияЭта часть книги дает сведения о создании анимации. После ее прочтения Вы сможете работать с анимацией в Blender.
    8. Пользовательские настройкиЗдесь повествуется о том, как настроить Blender под себя. В конце прочтения этой части книги Вы сможете изменить интерфейс под себя.
    9. Секреты BlenderТакие тонкости Blender, которые могут сделать работу в нем более комфортной. После изучения этой главы Вы сможете оптимизировать работу программы и работать с объектами на более высоком уровне.
  2. Blend4Web
    1. Blend4WebЗдесь рассказывается о настройке поведения объектов с помощью нодовой системы. Изучив главу, Вы будуте способны визуально программировать логику нодами.
  1. Рендеринг
    1. GameПримеры создания простых моделей для игр и самих игр, и материалов для игр. После изучения этой главы Вы будете способны создавать игры средней сложности.
    2. RenderПримеры использования движка Cycles Render с кратким описанием. В конце изучения этой главы Вы сможете быстрее разбираться в нодах.
  2. Игровая логика и программирование
    1. Game LogicПримеры настройки игровой логики в Blender. В конце прочтения этой главы Вы будете уметь создавать свою игровую логику.
    2. Python практикаРешение задач на Python с использованием Blender. После прочтения данной главы Вы приобретете навыки написания скриптов.

Старый Blender Содержит информацию о Blender 2.49. После прочтения данной части книги Вы сможете назвать основные плюсы и минусы Blender 2.49.

Blender & 3DsMax Сравнение Blender, 3DsMax, Sweet Home и Art Of Illusion. После прочтения этой главы Вы будете немного знать о различиях этих программ.

  1. PythonЭтот раздел посвящен языку программирования Python и его использованию в Blender. После ее прочтения Вы будете немного ориентироваться в написании скриптов в Blender.
  2. OSLЗдесь рассказывается о написании шейдеров на языке OSL.
  3. Немного об OpenGLЭтот раздел посвящен библиотеке OpenGL. Послее его прочтения Вы будуте способны программировать на OpenGL.
  4. Введение в GLSLНемного о языке шейдеров GLSL. После его прочтения Вы сможете читать простые программы на этом языке.
  5. Основы Web технологийЗдесь рассказывается о JS, Ajax и JSON. После изучения этого раздела Вы сможете легче ориентироваться в нодах, предназначенных для сети, в Blend4Web.
  1. Постобработка изображенийНемного о постобработки изображений. После прочтения этой главы книги Вы будете более осведомлены об эффектах, которые можно применять для изображений.
  1. MusicСписок песен и мелодий, которые могут помочь насладиться процессом работы в Blender.
Ссылки на материалы
  • Официальная справка по Blender
  • Blend4WebО создании 3D в браузере.
  • Blender 3D (первый вариант перевода)Перевод английской книги по Blender.
  • Blender 3D: Noob to Pro (англ.) Оригинал английской книги по Blender.
  • Перевод книги «Getting started with Blender 2.5» (автор: итальянец Joaclint Istgud)Перевод книги по Blender 2.5.
  • HTML bookО создании графического пользовательского интерфейса в HTML.
  • Список сайтов с готовыми моделями
Возможно, Вас заинтересует следующее:
  • Справочник_по_языку_Python_3.1
  • Пример работы с физикой в Blender
  • Самоучитель по Blender 2.6
  • Sculptris
  • Уроки скульптинга
  • Основы Sweet Home 3D
Читайте также:  Установка кассовых аппаратов обучение
О Blender 2.76 Скачать Blender 2.76

Содержание

Введение [ править ]

Python — это интерпретируемый высокоуровневый язык программирования, который упростит Вашу работу в Blender. Писать скрипты на нем можно в Text Editor.

Типы [ править ]

Тип — это именованное множество значений.

Описание [ править ]

В Python есть следующие типы: str (строка — обычный текст), int (любое целое число), float (вещественное число).

Str [ править ]

Строки предназначены для хранения текстовой информации. Строки могут быть любой длины. Например может быть такая строка:

Строки всегда берутся в кавычки. Одинарные или двойные. Чтобы растянуть строку на несколько строк программы, необходимо заключить её в три пары кавычек. Это не сработает и выдаст ошибку:

Символ переноса строки в последнем случае включается в строку.

Int [ править ]

Целые числа называются в данном языке программирования как int. Например: 10.

Float [ править ]

  1. Float — обычная десятичная дробь. Только вместо запятой в программировании используется точка: не 0,5, а 0.5.
  2. Также существуют так называемые числа с «плавающей запятой». Это числа такого вида: NeM. Где N — мантиса, а M — степень числа 10, на которое умножается N. Например: 3e6.

Операции для типов [ править ]

  1. Существуют следующие операции для целых чисел в Python: + (сложение), — (вычитание), * (умножение), ** (возведение в степень), // (деление с отбрасыванием остатка), % (деление с отбрасыванием всего кроме остатка). Например: 2**2 = 4.
  2. Для типа float есть такие операции: + (сложение), — (вычитание), * (умножение), ** (возведение в степень).
  3. Для строк характерна такая операция как сложение (она просто склеит две строки в одну). Например: ‘A’ + ‘S’ = ‘AS’.
  4. Но если для типа float применить операции: ** или %, то числа этого типа станут числами типа int.
  5. Также если возводить в отрицательную или дробную степень целое число, то оно преобразуется в число типа float.

Линейные программы [ править ]

Переменные [ править ]

Чтобы создать переменную какого либо типа из вышеперечисленных стоит написать следующее:

Имя — имя создаваемой переменной. Значение — начальное значение переменной. Например:

= — эта операция присваивания (установки значения).

Списки [ править ]

Список — последовательность элементов одного типа, имеющая имя. Списки в Python создаются так:

Но можно также создавать и пустые списки:

Для создания списков определена такая функция как split (разделение на слова по пробелам), и обратная ей join (объединение). Первая предназначена для получения списка из переменной строки разделением на слова по разделителю. Например:

Разделитель — символ по которому строка будет делиться на части. Join — противоположна Split. Она объединяет все элементы списка в одно целое. Например:

У функции Join есть параметр в скобках, определеющий что будет склеиваться в единое целое — то есть имя списка. Перед точкой пишется то что будет заполнителем между склеенными элементами.

Операции со списками [ править ]

  1. n.append(v) добавит элемент в конец списка.
  2. n.extend(L) добавит все элементы списка L в конец списка n.
  3. n.insert(i, m) вставляет элемент в список n в место с индексом i.
  4. n.remove(i) удалит из списка n элемент с индексом i.
  5. n.index(i, s, e) возвращает индекс первого элемента в списке со значение i, смотря список в диапазоне от s до e.
    1. s = 0, e = len(n)-1 по умолчанию. Эти параметры можно не указывать.
  6. n.count(v) предназначен для получения количества элементов v в списке.

Кортежи [ править ]

Кортеж — неизменяемый список. Поддерживает все функции работы со списками, которые не изменяют списки.

Также можно создать кортеж из строки так, что каждый символ строки будет отдельным элементом кортежа:

Множества [ править ]

Множество почти то же что и список, только с рядом ограничений:

  1. Нет индексации элементов — они располагаются в памяти в случайном порядке.
  2. Как следствие, в множестве не может быть двух и более элементов с одинаковыми значениями.

Создать множество из строки можно функцией set():

На выходе получим множество. Все повторяющиеся символы из строки будут записываться единожды:

Другой способ создания множества — перечисление всех в него входящих элементов в <> — литералах:

Писать <> без ничего для декларации множества недопустимо.

Операции с множествами [ править ]

  1. s.update(a, b, … n) — объединить все множества. Получится множество, в которое вошли элементы всех множеств.
  2. s.intersection_update(a, b, … n) — найти пересечение множеств. На выходе будет множество, в котором находятся элементы, которые есть в каждом из перечисленных множеств.
  3. s.difference_update(a, b, … n) — вычесть все множества из s. Будут убраны все элементы множеств, указанных в скобках, из s.
  4. s.add(e) добавляет элемент в множество.
  5. s.discard(e) — удаление элемента со значением e из множества s.
  6. s.clear() — удаляет все элементы из множества.

Словари [ править ]

Словари представляют собой тип данных, в котором каждому элементу соответствует его собственное символическое обозначение (ключ), имея который можно узнать значение элемента. Создаются словари с помощью литералов:

Также объявить их можно функцией dict() следующим образом:

Третий способ создать словарь, заполнив его только ключами, оставив соответствующие им значения значениями по умолчанию можно так:

В списке должны быть сами ключи — просто какие то значения, которые будут ключами для словаря.

Для изменения элементов словаря надо писать конструкцию:

Если данного ключа нет в словаре возникнет ошибка.

Попытка получить доступ к несуществующему элементу с ключом «s»:

Операции работы со словарями [ править ]

Словари располагают такими функциями работы над ними:

  1. d.clear() — удаляет все из словаря.
  2. d.copy() — возвращает копию словаря.
  3. d.get(k, v) — вернет значение из словаря d по ключу k, если же его нет то вернет значие v (по умолчанию None).
  4. d.keys() — вернет список, состоящий из всех ключей словаря.
  5. d.items() — вернет список, состоящий из всех значений словаря.

Ввод и вывод [ править ]

Для ввода чего либо используется команда (функция) input(). Так, эта программа установит значение переменной, которое пользователь ввел с клавиатуры:

Но сначала значение будет строкой. Для избежание этого надо явно указывать тип вводимого значения:

Для целых чисел: int(input()), для float (вещественных): float(input()), строк: str(input()).

Нелинейные программы [ править ]

Когда в программах нужно проверить какие либо условия либо повторить что-то несколько раз на помощь приходят: if, while и for операторы.

Оператор if [ править ]

Оператор if — команда, выполняющая блок команд, при выполнении условия.

Условие — любое выражение, которое проверяется на истинность. В нем могут быть знаки сравнения: > (больше), = (больше или равно), Тип bool [ править ]

Тип bool — тип, который имеет всего два значения: True (истина) и False (ложь). Если надо из true получить число то надо написать:

Имя — имя переменной, которой присвоется 1. Если преобразовать False к числу получится 0. Аналогично почти у строк: если она пуста то получится при преобразовании из str в bool значение 0, иначе 1.

В условиях, например чтобы написать условие вида:

где a — переменная, можно использовать сокращенный вариант:

Условия для множеств [ править ]

Для сравнения множеств есть специальные функции и операции сравнения:

  1. a.isdisjoint(b) — результат будет True, если общих элементов у множеств нет.
  2. Операция == в выражении «a == b» приобретет смысл «множества a и b полностью совпадают».
  3. А запись «a Оператор while [ править ]

While позволяет организовывать циклы, команды внутри которых будут выполняются только при выполнении условия. Создавать цикл можно так:

for [ править ]

For предназначен для циклического выполнения команд определенное количество раз. Его синтаксис таков:

Диапазоном может служить как простое значение так и выражение или список значений. Типы в диапазона могут быть любыми:

Сложные условия [ править ]

Когда требуется объединить условия следует пользоваться такими словами как and, or. And — вернет true, если все условия, которые были объединены с его помощью выполнились. Or — вернет true, когда хотя бы одно условие выполнилось. Например:

Объединяемые условия следует брать в скобки. Также как и в других языках логическое отрицание обозначаемся словом not. Читается как: если условие не такое как в скобках.

Функции [ править ]

Функция — это группа команд, которая имеет свое имя. Создавать ее можно так:

Вместо имени должно стоять название функции. a, b, c и n — параметры. Тип параметров не нужно указывать — пишите только их имена. Например:

Здесь слово return говорит о том, что функция возвращает результат равный a + b. То есть дает возможность присвоить сумму a и b другой переменной. Вместо a + b может стоять любое выражение.

Для использования функций (вызова) надо просто написать имя функции и значения ее параметров.

Лямбды [ править ]

Лямбда — эта функция, записанная в простой упрощенной форме. Общий синтаксис:

Параметрами тут могут выступать как и переменные, так и любые другие объекты. Результат может записываться как любое выражение. Вот пример лямбды:

Также лямбды можно именовать. Для этого пишите:

Для ее вызова используйте стандартный синтаксис вызова функций:

Вызов лямбды и функции, которые возводят d в квадрат:

Условия в лямбда-функциях [ править ]

Лямбды позволяют использовать в себе условия:

В данном случае лямбда вернет указанное после if выражение, только если проверяемое условие будет истинным:

Можно также использовать if с else:

Лямбда-функция вернет выражение2 только, если условие не выполнилось.

Вложенные лямбда-функции [ править ]

Лямбда функция может возвращать лямбда функцию следующим образом:

Внешняя лямбда вернет ссылку на вложенную функцию. Например:

Для вызова таких лямбд можно писать:

Где f — сложная лямбда, N на единицу больше M, а все остальные f (ниже определенной лямбды) — ссылки на более вложенные лямбды. Каждая внешняя лямбда для своей вложенной будет возвращать ссылку на нее.

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

Исключения [ править ]

Исключения — это ошибки, обнаруженные при выполнении программы. Существуют как системное исключения, так и обычные.

Системные исключения [ править ]

  1. SystemExit — исключение, порождаемое функцией sys.exit при выходе из программы.
  2. KeyboardInterrupt — возникает при прирывании программы сочетанием клавиш пользователем.

Обычные исключения [ править ]

  1. StopIteration — исключение, сигнализирующее, что итератор цикла for не может дальше продолжаться, так как цикл for исчерпал доступные значения(если в итераторе нет элементов).
  2. Арифметические ошибки (класса ArithmeticError):
    1. ArithmeticError.FloatingPointError возникает при неудачном выполнении операции с плавающей запятой.
    2. ArithmeticError.OverflowError появляется при невозможности удержать в памяти результат некоторой арифметической операции из-за того, что ее результат слишком велик.
    3. ArithmeticError.ZeroDivisionError — ошибка деления на 0.
  3. Остальные исключения:
    1. AttributeError — у класса данного объекта нет атрибута, на который Вы сослались.
    2. EOFError — функция не смогла выполнить некоторую операцию, так как наткнулась на конец файла.
    3. ImportError — ошибка при попытке импортировать модуль.
    4. MemoryError возникает при нехватке памяти для работы программы.
    5. RuntimeError такая ошибка, которая не является ни одным выше указанным исключением.

Синтаксические ошибки [ править ]

В отдельную группу можно отнести синтаксические ошибки. Все они наследуются от класса SysntaxError.

  1. IndentationError — исключение, порождаемое интерпретатором при неправильных отступах.
  2. TabError — смешивание пробелов и табуляции (через клавишу Tab).

Конструкция try — except [ править ]

Любые ошибки можно обработать (выполнить некоторые команды при возникновении исключения, избежав сбоя работы программы). Это делается с помощью операторов try и except:

Например, переменной b присвоется значение 1, если произойдет деление на 0:

Стоит заметить, что перехватывая (обрабатывая) исключение Вы дадите интерпретатору обрабатывать все, являющиеся потомками данного исключения.

Пример обработки всех исключений — потомков класса ArithmeticError:

Импорт [ править ]

Команда import импортирует некоторый модуль в данную программу. Общий синтаксис:

Вместо имени пишите название подключаемого модуля. Если их много, то имена модулей пишите через запятую.

При нужде в сокращении кода используйте конструкцию from n import m:

Вместо имени пишите имя модуля, из которого будет импортироваться что нибудь с именем имя2.

Также можно импортировать модули, присваивая им псевдонимы (другое название):

Модуль будет подключен к программе и вызов функций из него будет происходить следующим образом:

Аналогично будут использоваться другие данные из него (переменные, списки, классы и т. д.).

Генераторы [ править ]

Когда требуется создать список по некоторой формуле надо использовать следующую конструкцию:

Формула — формула, по которой строится список. Переменная — имя переменной, которая используется в формуле и значение которой берется из функции range().

Например, список квадратов чисел Вы можете создать так:

Также вместо range() можно использовать строку, по которой пробежится переменная из формулы:

Создание списка из строки, где каждая буква повторится 3 раза:

Генераторы с условиями [ править ]

В генераторы можно ключать условия с if таким образом:

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

Например, создание списка только из четных элементов:

Вложенные генераторы [ править ]

Один генератор может быть вложенным в другой:

Здесь второй генератор это:

Два генератора вложены друг в друга:

Не исключается возможность включения условий в такой генератор:

Степень вложенности генераторов один в другой не имеет предела. Например:

Создание списка при вложенном генераторе идет следующим образом:

  1. Переменная самого вложенного генератора всегда изменяется первой.
  2. Когда эта переменная доходит до конца своего диапазона, она принимает опять первое значение своего диапазона; также значение перемен ной внешнего генератора сдвигается на следующее значение в диапазоне.
  3. И так далее.

Классы [ править ]

Классы в Python объявляются следующим образом:

В классе описывается макет будущего объекта. Для того, чтобы этот макет работал (объекты можно было создавать), надо создать конструктор класса. В нем (все конструкторы называются как __init__) должна присутствовать переменная self:

Если это метод класса (а не метод экземпляра класса), то следует писать @classmethod перед описанием функции (метода класса):

Переменные классов [ править ]

  1. Обращение к переменным класса внутри классов должно начинаться с self.имя_переменной.
  2. Для того, чтобы переменная не была видна снаружи класса, в ее имени используйте двойное нижнее подчеркивание. Например:

Создание инстансов [ править ]

Инстанс (объект или экземпляр класса) — что то созданной с помощью класса. Общий синтаксис создания объекта:

Имя — это имя объекта; класс — это имя класса, экземпляр (или объект) которого мы желаем создать; параметры конструктора — параметры функции __init__ данного класса (self при создании объекта писать на надо). Пример:

Дополнение [ править ]

Работа с файлами [ править ]

Открывает имя. f — переменная. name.txt — имя файла. ‘m’ режим работы с файлом — вместо m должно стоять r (если только для чтения открыть файл), или если для записи то w.

Модуль random [ править ]

  1. random.randrange(start, stop, step) — возвращает случайно выбранное число из последовательности, которая начинается с start, заканчивается end и идет с шагом step
  2. random.random() — случайное число от 0 до 1

Черепашья графика [ править ]

Самый простой модуль для рисования — turtle.

Функции перемещения [ править ]

Команда Описание
forward(n) вперед на n пикселей
backward(n) назад на n пикселей
left(n) влево на n градусов
right(n) вправо на n градусов
goto(x, y) переместить курсор в точку с координатами (x, y)

Функции рисования [ править ]

Команда Описание
circle(r) рисует окружность радиуса r
circle(r, n) рисует дугу радиуса r, градусной мерой n против часовой стрелки, если r > 0, по часовой стрелке, если r Дополнительные функции [ править ]
Команда Описание
reset() очистить экран и установить курсор в начальную позицию
clear() очистить экран

Пример рисования [ править ]

Алгоритмы [ править ]

Режимы смешивания цветов [ править ]

Определение цветов [ править ]

Определим цвета как три значения в списках:

r, g, b — числа, соответствующие RGB.

Mix [ править ]

Смешивание цветов через нахождения их средних значений:

Add [ править ]

Смешивание цветов через суммирование их значений:

То же самое, но с учетом силы смешивания Strength (которая колеблется от 0.0 до 1.0):

Subtract [ править ]

Смешивание цветов через вычитание их значений:

Multiply [ править ]

Смешивание цветов через перемножение их значений:

Screen [ править ]

Смешивание цветов через перемножение первого компонентного и второго инвертированного:

Lighten [ править ]

Смешивание цветов через выборку наиболее светлых значений компонентов цветов:

Darken [ править ]

Смешивание цветов через выборку наиболее темных значений компонентов цветов:

Основы Python в Blender [ править ]

Модуль bpy.ops [ править ]

Создание объектов [ править ]

Для того чтобы создать объект в Object Mode с помощью Python надо в консоли или в текстовом редакторе (Text Editor) написать следующее:

Имя — название примитива с маленькой буквы. Например:

создать пустышку, где T — ее тип:

  1. «PLANE_AXES» — Plane Axis
  2. «ARROWS» — Arrows
  3. «SINGLE_ARROW» — Single Arrow
  4. «CIRCLE» — Circle
  5. «CUBE» — Cube
  6. «SPHERE» — Cube
  7. «CONE» — Cone

Можно указать сразу и точное положение центра добавляемого объекта:

Вы можете также установить поворот объекта по каждой из осей с помощью rotation(x, y, z):

Создание синусоидноподобной фигуры:

Визуализация списка списков:

Затенение [ править ]

Движение, вращение и масштабирование [ править ]

У этих трех функций есть следующие параметры:

Параметр Описание
value список, содержащий сдвиг/поворот/изменение размера по каждой из осей
constraint_axis список, содержащий логические значения, указывающие по каким осям не будет двигаться/поворачиваться/изменяться размера объект (значение False)
constraint_orientation система координат, используемая при перемещении/вращении/изменении размеров

  1. «GLOBAL» — глобальная
  2. «LOCAL» — локальная
proportional включено ли пропорциональное моделирование

  1. «ENABLED» — да
  2. «DISABLED» — нет
proportional_edit_falloff тип пропорционального моделирования

  1. «SMOOTH»
  2. «SPHERE»
  3. «ROOT»
  4. «INVERSE_SQUARE»
  5. «SHARP»
  6. «CONSTANT»
  7. «RANDOM»
proportional_size радиус влияния пропорционального моделирования

Копирование [ править ]

Копирование осуществляется функцией:

Параметрами функции являются словари OBJECT_OT_dublicate и TRANSFORM_OT_translate.

    В первом из них содержится информация о том является ли это копирование копированием объекта или созданием связанной его копии:

Ключ «linked» позволяет установить как будет копироваться объект — если равно True, то создасться его связанная копия, иначе будет скопирован весь объект.

Во втором хранятся сами данные преобразования объекта:

  1. x, y, z — значения перемещения по каждой из осей
  2. cX, cY, cZ — логические значения, указывающие по каким осям объект не перемещается (False)
  3. «T» — тип системы координат
  4. ED — значение, указывающее включено ли пропорциональное моделирования
  5. «FT» — тип пропорционального моделирования
  6. S — радиус влияния пропорционального моделирования

Пример использования функции:

Создание сцен [ править ]

Ниже «name» — имя любой сцены, с данными которой будем работать.

создает новую сцену, причем T — тип сцены и может быть одним из:

  1. «NEW» — соответствует New
  2. «EMPTY» — соответствует Copy Settings
  3. «LINK_OBJECTS» соответствует Link Objects
  4. «FULL_COPY» соответствует Full Copy

Управление режимами редактирования [ править ]

Управление Weight Paint [ править ]

Управление Vertex Paint [ править ]

Редактор логики — свойства [ править ]

Ниже a — активный объект, со свойствами которого работаем.

Управление слотами материалов [ править ]

Добавление логических блоков [ править ]

Создание сенсоров [ править ]

Создать Код
Сенсор ALWAYS bpy.ops.logic.sensor_add(type=’ALWAYS’)
Сенсор KEYBOARD bpy.ops.logic.sensor_add(type=’KEYBOARD’)
Сенсор MOUSE bpy.ops.logic.sensor_add(type=’MOUSE’)
Сенсор COLLISION bpy.ops.logic.sensor_add(type=’COLLISION’)
Сенсор RADAR bpy.ops.logic.sensor_add(type=’RADAR’)
Сенсор RADAR bpy.ops.logic.sensor_add(type=’RAY’)

Создание контроллеров [ править ]

Создать Код
Контроллер AND bpy.ops.logic.controller_add(type=’LOGIC_AND’)
Контроллер OR bpy.ops.logic.controller_add(type=’LOGIC_OR’)
Контроллер XOR bpy.ops.logic.controller_add(type=’LOGIC_XOR’)
Контроллер Python bpy.ops.logic.controller_add(type=’Python’)

Создание актуаторов [ править ]

Создать Код
Актуатор Action bpy.ops.logic.actuator_add(type=’ACTION’)
Актуатор Motion bpy.ops.logic.actuator_add(type=’MOTION’)
Актуатор Camera bpy.ops.logic.actuator_add(type=’CAMERA’)
Актуатор Property bpy.ops.logic.actuator_add(type=’PROPERTY’)
Актуатор Parent bpy.ops.logic.actuator_add(type=’PARENT’)
Актуатор Scene bpy.ops.logic.actuator_add(type=’SCENE’)

Применение модуля bpy.data [ править ]

Данный модуль предназначен для получения доступа к данным объектов (таких как камер, сцен, кистей и т. д.).

Типы движка [ править ]

Ниже «name» — имя любой сцены, с данными которой будем работать. Через словарь bpy.data.scenes можно получить имя используемого для рендеринга движка:

Функция, устанавливающая тип движка по его номеру:

Класс bpy.types.ID [ править ]

Уникальный идентификатор некоторого блока данных. Доступ к которому можно получить, например через bpy.data.

Свойство Значение
name Имя блока данных.
use_fake_user Использует ли данных блок данных фейкового пользователя. По умолчанию нет — False.

Работа со сценой [ править ]

Данные сцены [ править ]

Класс сцены — bpy.types.Scene(ID).

Получить доступ к сцене можно по ее имени — ключу в словаре scenes:

Свойство Описание
camera камера, используемая для рендеринга (та камера, из которой будет смотреть пользователь на сцену переключившись в просмотр из камеры)
active_layer индекс активного слоя
camera активная камера, с помощью которой происходит рендеринг сцены
cursor_location трехмерный вектор, отражающий положение 3D курсора
objects список, содержащий все объекты сцены
use_gravity использовать ли гравитацию для всех физических объектов
objects список, содержащий все объекты сцены
world мир, который используется в сцене
lock_frame_selection_to_range позволять ли в редакторе Timeline выбирать мышью кадры вне диапазона
frame_preview_start первый кадр Timeline
frame_preview_end последний кадр Timeline
frame_current текущий кадр Timeline
sync_mode режим синхронизации Timeline

  1. «NONE» — None
  2. «FRAME_DROP» — Frame Dropping
  3. «AUDIO_SYNC» — AV-sync
name имя сцены (унаследовано от класса ID)
use_fake_user использовать ли фейкового пользователя (унаследовано от класса ID)
Данные мира [ править ]

Класс сцены — bpy.types.World(ID).

Свойство Описание
horizon_color цвет горизонта
zenith_color цвет зенита
use_sky_real будет ли зависеть градиент неба от угла поворота камеры
mist_settings настройки тумана
name имя мира (унаследовано от класса ID)
use_fake_user использовать ли фейкового пользователя (унаследовано от класса ID)

Класс настроек тумана — bpy.types.WorldMistSettings(bpy_struct).

Свойство Описание
use_mist использовать ли туман
start расстояние от камеры, на котором туман начинает действовать
intensity минимальная интенсивность тумана
depth расстояние, на котором туман начинает увеличивается
falloff тип увеличения интенсивности тумана

  1. «QUADRATIC» — квадратичная прогрессия
  2. «LINEAR» — линейная прогрессия
Данные объектов сцены [ править ]
Данные камер [ править ]

Класс камеры — bpy.types.Camera(ID).

Данные камер хранятся в словаре bpy.data.cameras. Ниже «Camera» — имя произвольной существующей камеры.

Код Описание
ortho_scale сила масштабирования изображения (чем больше, тем мельче изображение)
show_passepartout показывать ли затемнение области (при просмотре из камеры), которая не отображается при рендеринге
passepartout_alpha прозрачность области (при просмотре из камеры), которая не отображается при рендеринге
shift_x искривление камеры по оси X плоскости просмотра
shift_y искривление камеры по оси Y плоскости просмотра
show_name показывать ли имя камеры
show_mist показывать ли туман при просмотре через камеру
type тип камеры

  1. «PERSP» — камера с перспективным видом
  2. «ORTHO» — камера с ортогональным видом
name имя камеры (унаследовано от класса ID)
use_fake_user использовать ли фейкового пользователя (унаследовано от класса ID)
Данные текстур [ править ]
  1. Класс текстуры — bpy.types.Texture( >
    Код Описание contrast контраст (от 0.0 до 1.0) type тип текстуры

    1. ‘IMAGE’
    2. ‘BLEND’
    3. ‘CLOUDS’
    4. ‘DISTORTED_NOISE’
    5. ‘ENVIRONMENT_MAP’
    6. ‘MAGIC’
    7. ‘MARBLE’
    8. ‘MUSGRAVE’
    9. ‘NOISE’
    10. ‘POINT_DENSITY’
    11. ‘STUCCI’
    12. ‘VORONOI’
    13. ‘WOOD’
    name имя текстуры (унаследовано от класса ID) use_fake_user использовать ли фейкового пользователя (унаследовано от класса ID)
  • Класс текстуры с картинкой — bpy.types.ImageTexture(Texture).
    Свойство Описание
    extension внешний вид изображения за своими реальными границами

    1. «EXTEND»
    2. «CLIP»
    3. «CLIP_CUBE»
    4. «REPEAT»
    5. «CHECKER»
    repeat_x количество изображений по X, которые вместятся в реальные границы изображения
    repeat_x количество изображений по Y, которые вместятся в реальные границы изображения
    invert_alpha инвестировать все значения альфа канала
    use_checker_even использовать ли четные положения для расположения текстуры на шахматной доске
    use_checker_odd использовать ли нечетные положения для расположения текстуры на шахматной доске
    image используемое изображение
    name имя текстуры (унаследовано от класса ID)
    use_fake_user использовать ли фейкового пользователя (унаследовано от класса ID)
  • Класс картинки — bpy.types.Image( >
    Код Описание contrast контраст (от 0.0 до 1.0) file_format формат изображения

    1. «BPM»
    2. «PNG»
    3. «JPG»
    4. и остальные
    filepath путь к изображению mapping тип наложения картинки в игровом движке

    1. «UV»
    2. «REFLECTION»
    size (только для чтения) размер изображения в пикселях, представленный в виде кортежа [x, y] (x — количество пикселей по X, y — количество пикселей по Y) name имя картинки (унаследовано от класса ID) use_fake_user использовать ли фейкового пользователя (унаследовано от класса ID)
  • Области просмотра [ править ]

    Класс разметки экрана — bpy.types.Screen(ID).

    Области экрана [ править ]

    Класс области экрана, в которой находится редактор — bpy.types.Area(bpy_struct).

    Свойство Комментарий
    type тип области
    width ширина
    heigth высота
    x координата верхнего левого угла по оси X относительно нижнего левого угла экрана
    y координата верхнего левого угла по оси Y относительно нижнего левого угла экрана
    name имя области экрана (унаследовано от класса ID)
    use_fake_user использовать ли фейкового пользователя (унаследовано от класса ID)

    Свойства объекта [ править ]

    Класс объекта — bpy.types.Object(ID).

    Данные объектов хранятся в словаре bpy.data.objects. Ниже «name» — имя любого объекта, с данными которого будем работать.

    Код Примечание
    location[0] положение по оси X
    location[1] положение по оси Y
    location[2] положение по оси Z
    rotation_euler[0] угол поворота по оси X
    rotation_euler[1] угол поворота по оси Y
    rotation_euler[2] угол поворота по оси Z
    scale[0] размер по оси X
    scale[1] размер по оси Y
    scale[2] размер по оси Z
    dimensions[0] абсолютный размер ограничительной рамки по оси X
    dimensions[1] абсолютный размер ограничительной рамки по оси Y
    dimensions[2] абсолютный размер ограничительной рамки по оси Z
    lock_location[0] заблокировано ли изменение положения по оси X
    lock_location[1] заблокировано ли изменение положения по оси Y
    lock_location[2] заблокировано ли изменение положения по оси Z
    lock_rotation[0] заблокировано ли изменение угла поворота по оси X
    lock_rotation[1] заблокировано ли изменение угла поворота по оси Y
    lock_rotation[2] заблокировано ли изменение угла поворота по оси Z
    lock_scale[0] заблокировано ли изменение размеров по оси X
    lock_scale[1] заблокировано ли изменение размеров по оси Y
    lock_scale[2] заблокировано ли изменение размеров по оси Z
    select True, если тело выделено, иначе False
    parent объект-родитель
    parent_type тип объекта-родителя

    1. «OBJECT»
    2. «VERTEX»
    name имя области экрана (унаследовано от класса ID)
    use_fake_user использовать ли фейкового пользователя (унаследовано от класса ID)

    Изменение положения объекта по оси X:

    Объекты и материалы [ править ]

    Все изложенное ниже можно применять как в интерактивном режиме, так и просто написав в виде скрипта. Ниже «name» — имя любого объекта, с данными которого будем работать.

    Некоторые свойства, связанные с материалами можно получить через словарь bpy.data.objects.

    Код Примечание
    name имя объекта
    active_material имя активного (выделенного) материала
    active_material_index индекс активного (выделенного) материала
    active_shape_key имя активного (выделенного) ключа формы
    active_shape_key_index индекс активного (выделенного) ключа формы
    show_name показывать ли имя объекта
    draw_type максимальный тип отрисовки

    Получение имени активного материала:

    Данные материалов хранятся в словаре bpy.data.materials. Ниже «mat» — имя любого материала.

    Класс материала — bpy.types.Material(ID).

    Код Примечание
    name имя материала
    type тип материала

    1. «SURFACE» — Surface
    2. «WIRE» — Wire
    3. «VOLUME» — Volume
    4. «HALO» — Halo
    use_nodes использовать ли нодовую систему для настройки материала
    diffuse_color цвет материала
    specular_color цвет блика
    mirror_color цвет отражения
    diffuse_intensivity яркость диффузного цвета материала
    specular_intensivity интенсивность цвет блика
    specular_hardless размытость блика
    use_shadeless отключить ли тени
    use_cubic_interpolation использовать ли кубическую интерполяцию
    use_tangent_shading использовать ли кубическую тангенциальное затенение
    emit сила самосвечения
    use_transparency использовать ли прозрачность
    transparency_method метод отрисовки прозрачности

    1. «MASK» — Mask
    2. «Z_TRANSPARENCY» — Z Transparency
    3. «RAYTRACE» — Raytrace
    aplha прозрачность
    halo.use_texture использовать ли текстуру для halo-материала
    halo.use_shaded использовать ли тени halo-материала
    halo.use_soft использовать ли смягчение halo-материала
    halo.size размер свечения halo-материала
    halo.hardness жесткость halo-материала
    halo.add сила добавления halo-материала (при наложении)
    halo.use_ring визуализировать ли кольца halo-материала
    halo.use_lines визуализировать ли кольца halo-материала
    halo.use_star визуализировать ли кольца halo-материала
    halo.ring_count количество колец halo-материала
    halo.line_count количество линий halo-материала
    halo.star_tip_count количество вершин звезд halo-материала

    Изменение имени материала:

    Режимы редактирования [ править ]

    Weight Paint [ править ]

    Класс кисти — bpy.types.Brush(ID).

    Ниже «Scene» — название сцены, на которой будут меняться настройки кисти; «B» — название кисти.

    режим смешивания кисти, может быть одним из:

    1. «MIX» — Mix
    2. «ADD» — Mix
    3. «SUB» — Subtract
    4. «MUL» — Multiply
    5. «BLUR» — Blur
    6. «LIGHTEN» — Lighten
    7. «DARKEN» — Darken
    режим рисования кисти, может быть одним из:

    1. «DOTS» — Dots
    2. «SPACE» — Space
    3. «AIRBRUSH» — Sirbrush
    4. «LINE» — Line
    5. «CURVE» — Curve
    Vertex Paint [ править ]

    Ниже «Scene» — название сцены, на которой будут меняться настройки кисти; «B» — название кисти.

    режим смешивания кисти, может быть одним из:

    1. «MIX» — Mix
    2. «ADD» — Mix
    3. «SUB» — Subtract
    4. «MUL» — Multiply
    5. «BLUR» — Blur
    6. «LIGHTEN» — Lighten
    7. «DARKEN» — Darken
    режим рисования кисти, может быть одним из:

    1. «DOTS» — Dots
    2. «SPACE» — Space
    3. «AIRBRUSH» — Sirbrush
    4. «LINE» — Line
    5. «CURVE» — Curve
    Специфичные для Vertex Paint [ править ]

    Физические настройки объекта [ править ]

    Ниже «name» — имя любого объекта, с данными которого будем работать.

    тип физики объекта

    1. «NO_COLLISION» — No Collision
    2. «STATIC» — Static
    3. «DYNAMIC» — Dynamic
    4. «RIGID_BODY» — Rigid Body
    5. «SENSOR» — Sensor
    тип границ столкновения

    1. «TRIANGLE_MESH» — Triangle Mesh
    2. «CONVEX_HULL» — Convex Hull
    3. «CONE» — Cone
    4. «RIGID_BODY» — Cylinder
    5. «SPHERE» — Sphere
    6. «BOX» — Box
    7. «CAPSULE» — Capsule

    Переобозначения [ править ]

    Возможно укорачивать код с введением своих обозначений, например:

    Профессиональный уровень [ править ]

    Blender Game Engine [ править ]

    Схема работы в BGE [ править ]

    1. Все подключенные к контроллеру Python сенсоры посылают ему сигналы, а он их обрабатывает.
    2. Также можно с помощью скрипта использовать подключенные к контроллеру Python актуаторы.

    Главные типы [ править ]

    1. class bge.types.PyObjectPlus — класс большинства объектов в игровом движке BGE.
    2. Вот так выглядит упрощенная схема классов в BGE:

    Описание сенсоров [ править ]

    key, hold1, hold2 — тип клавиши; useAllKeys — логическое значение

    Имя Класс Свойства и функции Типы свойств
    Always class bge.types.KX_AlwaysSensor(SCA_ISensor) нет свойств нет свойств
    Collision class bge.types.KX_TouchSensor(SCA_ISensor)
    1. propName — имя свойства; если объект столкнется с объектом, имеющим это свойство то это будет считаться столкновением; если propName == , то столкновение с любым объектом будет считаться столкновением
    2. useMaterial — будет ли выполняться проверка на столкновение объекта со свойством (True) или с материалом (False)
    propName — string; useMaterial — boolean
    Delay class bge.types.SCA_DelaySensor(SCA_ISensor)
    1. delay — время между положительными сигналами, посылаемыми контроллеру
    2. duration — время, которое посылаются сигналы через промежутки времени Delay
    3. repeat — если равно 1, то цикл выполнения сенсора будет бесконечный, иначе должно равняться 0
    delay, duration и repeat — integer
    Keyboard class bge.types.SCA_KeyboardSensor(SCA_ISensor)
    1. key — главная клавиша
    2. hold1, hold2 — две остальные клавиши из комбинации клавиш
    3. useAllKeys — реагировать ли на нажатие любых клавиш (если равно True, то да)
    4. getKeyStatus(keycode) — получить состояние клавиши keycode (вместо keycode любая константа)
    Ray class bge.types.SCA_RaySensor(SCA_ISensor)
    1. propName — свойство, объекты с которым следует обнаруживать
    2. range — длина луча
    3. useMaterial — если равно True, то в propName следует будет вписать имя материала для обнаружения его лучом
    4. useXRay — если равно True, луч будет проходить сквозь все объекты, даже которые не имеют свойства
    5. axis — локальная ось, по которой будет направлен лучь
      1. KX_RAY_AXIS_POS_X — +X
      2. KX_RAY_AXIS_POS_Y — +Y
      3. KX_RAY_AXIS_POS_Z — +Z
      4. KX_RAY_AXIS_NEG_X — -X
      5. KX_RAY_AXIS_NEG_Y — -Y
      6. KX_RAY_AXIS_NEG_Z — -Z
    propName — строковое значение; range — float; useMaterial, useXRay — логическое значение; axis — целое число
    Near class bge.types.KX_NearSensor(KX_NearSensor)
    1. distance — расстояние, требуемое для активации сенсора
    2. resetDistance — дистанция, на которое следует отдалиться другому объекту, чтобы активный сенсор деактивировался
    distance, resetDistance — float
    Radar class bge.types.KX_RadarSensor(KX_NearSensor)
    1. propName — свойство, объекты с которым следует обнаруживать
    2. range — длина радара
    3. angle — угол радара
    4. useMaterial — если равно KX_True, то в propName следует будет вписать имя материала для обнаружения его лучом, иначе — при KX_False — имя свойства
    5. axis — локальная ось, по которой будет направлен конус радара
      1. KX_RADAR_AXIS_POS_X — +X
      2. KX_RADAR_AXIS_POS_Y — +Y
      3. KX_RADAR_AXIS_POS_Z — +Z
      4. KX_RADAR_AXIS_NEG_X — -X
      5. KX_RADAR_AXIS_NEG_Y — -Y
      6. KX_RADAR_AXIS_NEG_Z — -Z
    propName — строковое значение; range, angle — float; useMaterial — логическое значение

    Сенсор Always всегда активен.

    Описание контроллеров [ править ]

    Имя Класс Свойства и функции Типы свойств
    AND class bge.types.SCA_ANDController(SCA_IController) нет свойств нет свойств
    OR class bge.types.SCA_ORController(SCA_IController) нет свойств нет свойств
    XOR class bge.types.SCA_XORController(SCA_IController) нет свойств нет свойств
    NOR class bge.types.SCA_NORController(SCA_IController) нет свойств нет свойств
    Script class bge.types.SCA_PythonController(SCA_IController)
    1. script — имя запускаемого скрипта
    2. activate(act) — активация актуатора act, подключенного к скрипту
    3. deactivate(act) — деактивация актуатора act, подключенного к скрипту
    script, act — строки

    Получить контроллер, управляющий скриптом можно так:

    А получить объект, у которого данный контроллер можно так:

    Описание актуаторов [ править ]

    min, max — float; object — KX_GameObject

    fileName — string; mode — int

    Имя Класс Свойства Типы свойств
    Action class bge.types.BL_ActionActuator(SCA_IActuator)
    1. action — имя действия (анимации)
    2. frameStart — кадр, с которого будет проигрываться анимация
    3. frameEnd — кадр, на котором закончится проигрываться анимация
    action — string; frameStart, frameEnd — float
    Camera class bge.types.KX_CameraActuator(SCA_IActuator)
    1. min — минимальная дистанция до объекта, за которым следит камера
    2. max — максимальная дистанция от объекта, за котором следит камера
    3. object — имя объекта, за которым следит камера
    Game class bge.types.KX_GameActuator(SCA_IActuator)
    1. fileName — имя файла игры, который откроется
    2. mode — режим работы актуатора (bge.logic.KX_GAME_START — открыть файл fileName; bge.logic.KX_GAME_RESTART — перезапустить игру; bge.logic.KX_GAME_QUIT — выйти из игры)
    Scene class bge.types.KX_SceneActuator(SCA_IActuator)
    1. scene — имя сцены, с которой следует произвести какие-то изменения
    2. camera — имя камеры, которую следует установить
    3. mode — режим работы актуатора (от 0 — 5)
    scene — string; camera — KX_Camera; mode — integer
    Sound class bge.types.KX_SoundActuator(SCA_IActuator)
    1. volume — громкость звука
    2. time — секунда, с которой начнет воспроизводится аудио
    3. mode — режим воспроизведения аудио (KX_SOUNDACT_PLAYSTOP — проиграть один раз; KX_SOUNDACT_LOOPEND — проигрывать бесконечно)
    4. is3D — звучит ли музыка объемно
    5. volume_maximum — максимальная громкость звука (не зависит от расстояния)
    6. volume_minimum — минимальная громкость звука (не зависит от расстояния)
    volume, time, volume_maximum, volume_minimum — float; mode — integer; is3D — boolean
    State class bge.types.KX_StateActuator(SCA_IActuator)
    1. operation — операция, которая изменит состояние объекта (KX_STATE_OP_SET — установит новое состояние)
    operation — integer
    Sound class bge.types.KX_SoundActuator(SCA_IActuator)
    1. startSound() — начинает проигрывать звук
    2. pauseSound() — прекращает проигрывать звук
    3. stopSound() — прекращает проигрывать звук и при следующем проигрывании проигрывание звука начнется с секунды, указанной в time
    startSound, pauseSound, stopSound — None

    Активировать актуатор можно через тот контроллер, к которому он подсоединен:

    Где c — контроллер, a — актуатор. Деактивация происходит подобным образом:

    Где c — контроллер, a — актуатор.

    Константы [ править ]

    Состояния логических блоков [ править ]

    Сенсоры [ править ]

    Константа Описание
    bge.logic.KX_SENSOR_INACTIVE сенсор неактивен
    bge.logic.KX_SENSOR_ACTIVE сенсор активен
    bge.logic.KX_SENSOR_JUST_ACTIVATED сенсор активировался только что
    bge.logic.KX_SENSOR_JUST_DEACTIVATED сенсор деактивировался только что

    Состояния [ править ]

    Для состояний есть следующие константы:

    1. bge.logic.KX_STATE1
    2. bge.logic.KX_STATE2
    3. bge.logic.KX_STATE3
    4. bge.logic.KX_STATE4
    5. bge.logic.KX_STATE5
    6. bge.logic.KX_STATE6
    7. bge.logic.KX_STATE7
    8. bge.logic.KX_STATE8
    9. bge.logic.KX_STATE9
    10. bge.logic.KX_STATE10
    11. bge.logic.KX_STATE11
    12. bge.logic.KX_STATE12
    13. bge.logic.KX_STATE13
    14. bge.logic.KX_STATE14
    15. bge.logic.KX_STATE15
    16. bge.logic.KX_STATE16
    17. bge.logic.KX_STATE17
    18. bge.logic.KX_STATE18
    19. bge.logic.KX_STATE19
    20. bge.logic.KX_STATE20
    21. bge.logic.KX_STATE21
    22. bge.logic.KX_STATE22
    23. bge.logic.KX_STATE23
    24. bge.logic.KX_STATE24
    25. bge.logic.KX_STATE25
    26. bge.logic.KX_STATE26
    27. bge.logic.KX_STATE27
    28. bge.logic.KX_STATE28
    29. bge.logic.KX_STATE29
    30. bge.logic.KX_STATE30

    Изменение меша в BGE [ править ]

    За меш в BGE отвечает класс bge.types.KX_MeshProxy(SCA_IObject).

    Функция Описание
    getMaterialName(i) возвращает имя материала из списка materials с индексом i
    getTextureName(i) возвращает имя текстуры, которая используется материалом с индексом i
    getVertexArrayLength(i) возвращает длину списка вершин, у которых установлен материал с индексом i
    getVertex(i, vi) возвращает объект вершины, у которой материал с индексом i и которая находится на vi-ой позиции в списке вершин для этого материала

    Также есть и некоторые переменные класса:

    1. numPolygons — количество полигонов меша
    2. materials — список всех материалов меша

    Класс вершины bge.types.KX_VertexProxy(SCA_IObject) [ править ]

    При работе с вершиной следует учитывать, что начальной точкой системы координат для каждого объекта является его собственный центр.

    Свойство Описание
    XYZ вектор, указывающий положение точки в пространстве
    UV вектор, указывающий текстурные координаты точки
    normal вектор, указывающий направление нормали вершины
    color список, определяющий цвет точки в формате [r, g, b, a]
    x координата X вершины
    y координата Y вершины
    z координата Z вершины
    u координата U текстуры вершины
    v координата V текстуры вершины
    u2 вторая координата U текстуры вершины
    v2 вторая координата V текстуры вершины
    r значение красного компонента цвета от 0.0 до 1.0
    g значение зеленого компонента цвета от 0.0 до 1.0
    b значение синего компонента цвета от 0.0 до 1.0
    a значение прозрачного компонента цвета от 0.0 до 1.0

    Пример скрипта, который автоматически раскрашивает вершины, в зависимости от координаты Z:

    Класс полигона bge.types.KX_PolyProxy(SCA_IObject) [ править ]

    Свойство Описание
    material_name (только для чтения) имя материала, который использует материал
    material (только для чтения) материал, используемый полигоном
    texture_name (только для чтения) имя текстуры, которую использует полигон
    material_id (только для чтения) имндекс материала, который использует полигон
    v1 (только для чтения) первая вершина полигона
    v2 (только для чтения) вторая вершина полигона
    v3 (только для чтения) третья вершина полигона
    v4 (только для чтения) четвертая вершина полигона
    visible (только для чтения) полигон видим при True, иначе — не видим

    Класс bge.events [ править ]

    Данный класс предназначен для работы с клавишами. Он содержит следующие константы:

    Кнопки мыши [ править ]

    Константа Описание
    bge.events.LEFTMOUSE Нажатие левой кнопки мыши.
    bge.events.RIGHTMOUSE Нажатие правой кнопки мыши.
    bge.events.MIDDLEMOUSE Нажатие колесика кнопки мыши.
    bge.events.WHEELUPMOUSE Движение колесика мыши от себя.
    bge.events.WHEELDOWNMOUSE Движение колесика мыши на себя.

    Клавиатура [ править ]

    Алфабитные клавиши [ править ]
    Константа Название соответствующей клавиши
    bge.events.AKEY A
    bge.events.BKEY B
    bge.events.CKEY C
    bge.events.DKEY D
    bge.events.EKEY E
    bge.events.FKEY F
    bge.events.GKEY G
    bge.events.HKEY H
    bge.events.IKEY I
    bge.events.JKEY J
    bge.events.KKEY K
    bge.events.LKEY L
    bge.events.MKEY M
    bge.events.NKEY N
    bge.events.OKEY O
    bge.events.PKEY P
    bge.events.QKEY Q
    bge.events.RKEY R
    bge.events.SKEY S
    bge.events.TKEY T
    bge.events.UKEY U
    bge.events.VKEY V
    bge.events.WKEY W
    bge.events.XKEY X
    bge.events.YKEY Y
    bge.events.ZKEY Z

    Класс bge.types.KX_Scene(PyObjectPlus) [ править ]

    Класс bge.types.KX_Scene(PyObjectPlus) позволяет получить данные о сцене. А для получения сцены, в которой запущен данный скрипт следует писать:

    Здесь a — объект сцены-владельца скрипта.

    1. Любая сцена располагает следующими атрибутами, доступными сейчас только для чтения:
      Имя атрибута сцены Описание Возвращаемое значение
      name Имя сцены string
      objects Список всех объектов в сцене CListValue of KX_GameObject
      lights Список источников света в сцены CListValue of KX_LightObject
      cameras Список всех камер на сцене CListValue of KX_Camera
      active_camera Ссылка на объект — текущую камеру KX_Camera
      world Хранит ссылку на объект мира, который используется в данный момент KX_WorldInfo
      gravity Устанавливает вектор гравитации Vector((gx, gy, gz))
      pre_draw Список всех функций, вызываемых перед рендерингом сцены list
      post_draw Список всех функций, вызываемых после рендеринга сцены list
    2. Также можно работать со сценой следующими способами:
      Имя функции Описание Параметры Возвращаемое значение
      addObject(object, reference, time=0) Добавляет на сцену объект
      1. object — имя объекта, который следует добавить
      2. reference — имя объекта, в центр которого следует поместить добавленный объект
      3. time — время жизни объекта (если = 0, то объект живет вечно)
      object, reference — KX_GameObject or string; time — integer
      end() Удаляет из игры сцену нет параметров нет параметров
      restart() Перезапускает сцену нет параметров нет параметров
      replace() Перезапускает сцену
      1. scene — имя сцены, на которую следует заменить
      scene — string

    Класс bge.types.KX_WorldInfo(PyObjectPlus) [ править ]

    У тумана есть следующие атрибуты:

    Имя атрибута сцены Описание Возвращаемое значение
    mistEnable Включен ли туман boolean
    mistStart Дистанция от точки наблюдателя, с которой начинается туман float
    mistDistance Расстояние от дистанции mistStart, требующиеся для того, чтобы туман стал 100 процентным float
    mistIntensity Минимальная интенсивность тумана float
    mistType Тип тумана (KX_MIST_QUADRATIC — квадратичный; KX_MIST_LINEAR — линейный; KX_MIST_INV_QUADRATIC — инвертированный квадратичный)
    mistColor Цвет тумана [r, g, b]
    ambientColor Фоновый цвет окружающей среды [r, g, b]

    KX_GameObject(SCA_IObject) [ править ]

    Данный класс — главный класс, от которого все остальные классы объектов являются потомками. В нем есть следующие свойства.

    Свойство Значение
    a.name (только для чтения) Имя объекта.
    a.worldPosition (только для чтения) Вектор, указывающий координаты центра объекта.
    a.localPosition Вектор, указывающий координаты центра объекта.
    a.mass Масса объекта.
    a.isSuspendDynamics (только для чтения) Является ли объект статическим или динамическим.
    a.linearDamping Затухание скорости.
    a.angularDamping Затухание вращения.
    a.linVelocityMin Минимальное значение линейной скорости.
    a.linVelocityMax Максимальное значение линейной скорости.
    a.angularVelocityMin Минимальное значение скорости вращения.
    a.angularVelocityMax Минимальное значение скорости вращения.
    a.localInertia Вектор, отвечающий за инерцию объекта.
    a.parent (только для чтения) Родитель объект.
    a.children Список всех ближайших потомков.
    a.childrenRecursive Список всех потомков.
    a.scene (только для чтения) Имя сцены, на которой расположен объект.
    a.visible Если равно True, то объект видим, иначе нет.
    a.record_animation Если равно True, то будет записываться анимация движения объекта в виде f-кривых, иначе нет.
    a.color Цвет объекта в виде [r, g, b, a] вектора.
    a.life Время жизни объекта.
    a.endObject Удаление тела.
    a.sensors Словарь всех сенсоров объекта.
    a.controllers Словарь всех контроллеров объекта.
    a.actuators Словарь всех актуаторов объекта.

    Есть следующие функции для объекта:

    1. applyMovement(movement, local=False) — переместить объект (тут movement — трехмерный вектор, указывающий перемещение по каждой оси; local = True означает, что тело будет двигаться в локальном пространстве, а при False — в глобальном)
    2. applyForce(force, local=False) — переместить объект (тут force — трехмерный вектор, указывающий перемещение по каждой оси; local = True означает, что тело будет двигаться в локальном пространстве, а при False — в глобальном)
    3. applyRotation(rotation, local=False) — повернуть объект (тут rotation — трехмерный вектор, указывающий угол поворота по каждой оси; local = True означает вращать в локальном пространстве, а при False — в глобальном)
    4. applyTorque(torque, local=False) — повернуть объект с затуханием силы поворота (тут torque — трехмерный вектор, указывающий угол поворота по каждой оси; local = True означает вращать в локальном пространстве, а при False — в глобальном)
    5. setParent(parent, compound=True, ghost=True) — установить родителя для объекта (parent — объект-родитель; при compound = True физические границы объектов будут объединены; при ghost = True пока объект имеет родителя он будет являться призраком)
    6. addDebugProperty(name, debug = True) — включить/выключить отображение игрового свойства с именем name (включено при debug = True)
    7. sendMessage(subject, body=»«, to=»») — отправить сообщение с темой subject, телом body, к объекту с именем, указанном в параметре to.

    Класс bge.types.KX_Camera(KX_GameObject) [ править ]

    Данный класс нужен для работы с объектами‐камерами.

    Свойство Описание
    lens Значение Focal Length.
    ortho_scale Размер изображения при ортогональной проекции.
    near Ближнее расстояние отсечения для камеры.
    far Дальнее расстояние отсечения для камеры.
    shift_x Сдвиг камеры по локальной оси X.
    shift_y Сдвиг камеры по локальной оси Y.
    perspective Если равно True, то вид из камеры перспективный, иначе ортогональный.
    useViewport Если равно True, то вид Вы будете смотреть из этой камеры на сцену во время игры.
    Функция Описание
    a.getScreenPosition(object)
    Вернет список, содержащий относительные X и Y (от 0 до 1) спроецированного на экран центра объекта object.
    Работа с Frustum [ править ]

    Frustum — усеченная пирамида. На пересечение с ней можно проверять как параллелепипед, так и сферу. Ниже a — объект-камера.

    Значение Описание
    a.INTERSECT Сфера или параллелепипед пересекает frustum.
    a.INSIDE Сфера или параллелепипед находится внутри frustum.
    a.OUTSIDE Сфера или параллелепипед находится вне frustum.
      Функция, которая позволяет проверить где находится точка по отношению к frustum имеет следующий вид:

    Здесь box — список, хранящий 8 списков (в которых хранятся по 4 координаты каждой точки). Например:

    Класс KX_LightObject(KX_GameObject) [ править ]

    Этот класс нужен для настройки источников освещения.

    Ниже L — источник освещения.

    Свойство Описание
    L.type Тип источника освещения. Может быть одним из:

    1. SPOT — обычная лампа Lamp
    2. SUN — солнце
    3. SPOT — направленный источник освещения
    L.energy сила освещения
    L.layer слой, объекты на котором будут освещены этим источником света
    L.shadowClipStart (только для чтения) расстояние от источника света, на котором начинается расчет карты теней
    L.shadowClipEnd (только для чтения) расстояние от источника света, на котором начинается расчет карты теней
    L.shadowColor цвет тени
    L.distance то расстояние от лампы, дальше которого свет не идет (только для NORMAL и SPOT)
    L.spotsize радиус освещаемой окружности источником освещения типа SPOT
    L.spotblend управляет мягкостью краев освещенной области

    Настраивание лампы так, что она станет направленным источником света и будет светить красным:

    Изменение яркости в зависимости от расстояния по закону синуса:

    Модели изменения силы света [ править ]

    1. dist — расстояние на котором сила света не равна 0.
    2. plus_d — расстояние на котором сила света постепенно линейно возрастает от минимальной (min_energy) до максимальной (max_energy).
    1. (d-const_dist) — узнаем дистанцию между объектом и лампой, отбросив расстояние const_dist
    2. plus_d-(d-const_dist) — разность между расстояниями для того, чтобы сила света увеличивалась, а не уменьшалась по приближению объекта
    3. (((plus_d-(d-const_dist))/plus_d) — узнаем какую часть от plus_d составляет текущее инвертированное расстояние с отбросом const_dist
    4. ((plus_d-(d-const_dist))/plus_d)*max_energy — получаем силу свечения

    Изменение материалов с помощью bge.types.KX_BlenderMaterial(PyObjectPlus) [ править ]

    С помощью данного класса можно работать с материалами. Для доступа к конкретному материалу следует писать:

    meshes — список, в котором хранятся ссылки на используемые в объекте меши, materials — список материалов, m — индекс меша для которого следует получить все имеющиеся на нем материалы, n — индекс материала. Причем, порядок элементов в meshes и materials соответствует друг другу. Ниже M — материал.

    Свойство Описание
    M.material_index индекс материала
    M.alpha прозрачность материала
    M.diffuseIntensity интенсивность диффузного цвета
    M.specularIntensity яркость блика
    M.diffuseColor диффузный цвет
    M.specularColor цвет блика
    M.hardness жесткость блика (чем меньше, тем размытее и больше блик)
    M.emit самосвечение

    Непосредственное редактирование меша [ править ]

    Для возможности изменения меша следует использовать класс bmesh. Редактирование не для BGE.

    Функция Описание Параметры
    clear() очищает данные о меше нет
    copy() копирует данные меша нет
    from_mesh(mesh, face_normals=True, use_shape_key=False, shape_key_index=0) создает меш, идентичный другому мешу
    1. mesh — тот меш, с которого создается копия
    2. use_shape_key — если равно True, то будут использоваться измененные ключом формы с индексом shape_key_index координаты вершин
    to_mesh(mesh) записывает данные меша в mesh mesh — имя меша, в который будут записаны данные другого меша
    normal_update() обновляет данные нормалей нет

    В классе bmesh.types.BMesh есть такие последовательности:

    1. verts — список вершин меша
    2. edges — список ребер меша
    3. faces — список полигонов меша

    Класс вершины bmesh.types.BMVert [ править ]

    Этот класс располагает возможностями по изменению свойств вершин меша.

    Свойство Описание
    hide видимость вершины — True (видима), иначе нет
    is_wire (только для чтения) True, если вершина ни с одним полигоном не соединена
    link_edges (только для чтения) список связанных ребер
    link_faces (только для чтения) список связанных полигонов
    normal 3D вектор, определяющий направление нормали
    select True, если вершина выделена, иначе — False

    Класс ребра bmesh.types.BMEdge [ править ]

    Этот класс располагает возможностями по изменению свойств ребер меша.

    Свойство Описание
    hide видимость ребра — True (видима), иначе нет
    is_wire (только для чтения) True, если ребро ни с одним полигоном не соединено
    link_faces (только для чтения) список связанных полигонов
    normal 3D вектор, определяющий направление нормали
    select True, если ребро выделенло, иначе — False
    link_verts (только для чтения) список вершин, из которых состоит ребро

    С помощью функции calc_length() можно узнать длину ребра.

    Класс полигона bmesh.types.BMFace [ править ]

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

    Свойство Описание
    hide видимость полигона — True (видима), иначе нет
    link_edges (только для чтения) список связанных ребер
    normal 3D вектор, определяющий направление нормали
    select True, если ребро выделенло, иначе — False
    material_index индекс используемого материала
    Функция Описание Параметры
    f.normal_flip() поворачивает нормаль на 180 градусов по всем осям нет
    f.calc_perimeter() возвращает периметр полигона нет
    f.calc_area() возвращает площадь полигона нет
    f.calc_center_bounds() возвращает вектор, показывающий координаты центра полигона нет

    Последовательности данных меша [ править ]

    Класс списка вершин bmesh.types.BMVertSeq [ править ]

    Функция Описание Параметры
    remove(vert) удаляет вершину vert — объект вершины
    new(co=(x, y, z)) создает новую вершину co — вектор, указывающий координаты вершины

    Класс списка ребер bmesh.types.BMEdgeSeq [ править ]

    Функция Описание Параметры
    remove(egde) удаляет ребро egde — объект ребра
    new(verts) создает новое ребро verts — список, состоящий их двух вершин

    Класс списка полигонов bmesh.types.BMFaceSeq [ править ]

    Функция Описание Параметры
    remove(face) удаляет полигон egde — объект полигон
    new(verts) создает новый полигон verts — список вершин

    Модуль math [ править ]

    Класс для математических операций mathutils [ править ]

    Данный класс предназначен для проведения некоторых математических операций.

    Работа с цветом с применением mathutils.Color [ править ]

    Этот класс нужен для работы с цветом. Объект цвет создается так:

    n — имя объекта цвета; r, g и b — значения компонентов цвета.

    Также можно узнавать r, g, b, h, s или v так:

    Где c может быть одним из:

    Класс для работы с углами mathutils.Euler [ править ]

    С помощью mathutils.Euler Вы можете создавать углы Эйлера. Для создания инстанса класса пишите:

    angles — список, состоящий из трех углов; порядок, в котором указываются углы устанавливается вторым параметром и может быть равен:

    Получить значение аттрибутов можно следующим образом:

    Атрибут Пояснение
    a.x Угол поворота по оси X.
    a.y Угол поворота по оси Y.
    a.z Угол поворота по оси Z.
    a.order Порядок, в котором указываются углы.
    Функция Описание
    a.zero() Устанавливает все три угла в значения 0.0.
    a.to_matrix Возвращает матрицу размера 3×3.
    a.rotate(obj) Поворачивает каждую ось угла Эйлера на значение другого угла Эйлера. Каждая ось поворачивается на ей соответствующую (X на X2, Y на Y2, Z на Z2, где буквы без индексов — изначальный угол Эйлера, а буквы с 2 — второй угол Эйлера).

    Работа с векторами через класс mathutils.Vector [ править ]

    Класс для работы с векторами. Создается вектор так:

    Где v — список, состоящий из 3-х компонентов вектора. Например:

    Возвращает вектор, полученный интерполяцией между двумя векторами n и b.

    1. f меняется от 0.0 до 1.0.
    2. Чем больше значение f, тем ближе полученный вектор к вектору b.
    Функция Описание
    n.normilize() Укорачивает длину вектора до 1.0.
    n.normilized() Возвращает новый укороченный вектор n до 1.0.
    len(n) Возвращает длину вектора.
    n.angle(b, fallback = any) Узнает угол векторами n и b, если это невозможно (они из векторов является нулевым вектором), то возвращает any (по умолчанию вместо any возвращает None).
    n.resize_2d() Преобразует вектор n в 2d вектор.
    n.resize_3d() Преобразует вектор n в 3d вектор.
    n.rotate(a) Вращает вектор на угол Эйлера a.
    n.lerp(b, f)

    Настройка окна при помощи bge.render [ править ]

    Модуль bge.render содержит следующие функции для работы с окном:

    Имя функции Описание Параметры Возвращаемое значение
    bge.render.getWindowWidth() Вернет ширину окна в пикселях нет параметров integer
    bge.render.getWindowHeight() Вернет высоту окна в пикселях нет параметров integer
    bge.render.setWindowSite(x, y) Устанавливает размер окна x, y — размеры окна в пикселях (integer) None
    bge.render.showMouse(visible) Делает курсор видимым или скрывает его visible (boolean) — видимость курсора (true — видим, false — скрыт) None
    bge.render.setMousePosition(x, y) Устанавливает позицию курсора x, y — позиция курсора (integer) None
    bge.render.setMaterialMode(mode) Устанавливает режим отображения материалов mode — режим отображения материалов (KX_TEXFACE_MATERIAL — самый простой метод прорисовки материалов, KX_BLENDER_MULTITEX_MATERIAL — мультитекстура, KX_BLENDER_GLSL_MATERIAL режим отоюражения GLSL) None
    bge.render.getMaterialMode() Вернет режим отображения материалов нет параметров Вернет метод отображения материалов
    bge.render.setMipmapping(value) Установит режим сглаживания текстур или уберет его value — установит режим сглаживания материалов (true — включен, false — выключен) None

    Работа с контекстом через bpy.context [ править ]

    Код Описание
    bpy.context.visible_objects список видимых объектов
    bpy.context.selectable_objects список объектов, которые могут быть выделены
    bpy.context.selected_objects список выделенных объектов
    bpy.context.active_object активный объект

    Включение видимости имен у всех выделенных объектов, положение которых по оси X>0:

    источник

    Популярные записи

    Мотор колесо комплекты для установки
    Установка светодиодной оптики в автомобиль
    Установка имплантов в испании
    Установка web сервера на своем компьютера
    Установка зажигания на минске 125
    Установка и подключение душевой панели

    Добавить комментарий

    Adblock
    detector