Документация Blender'а Том I - Руководство Пользователя | ||
---|---|---|
<<< Пред | Система плагинов Blender'а | След >>> |
Относится к Blender v2.31
В этом разделе мы напишем базовый плагин последовательности, а затем попробуем его использовать. В основе плагина последовательности лежат несколько значений; 1-3 входных буфера изображения и другая информация, а в выводе результирующий буфер избражения.
Все файлы необходимые для разработки плагина, также как и несколько примеров могут быть найдены в каталоге blender/plugins. Вы можете также получить множество плагинов отсюда: http://www.cs.umn.edu/~mein/blender/plugins
Относится к Blender v2.31
#include <plugin.h>
Каждый плагин Blender'а должен включать заголовочный файл, который содержит все структуры и определения необходимые для того, чтобы он правильно работал с Blender'ом.
char name[]="Blur";
Строка символов содержит имя плагина, это значение будет показано как заголовок в окне текстурных кнопок.
VarStruct varstr[]= {...};
Переменная varstr содержит всю информацию, которая нужна Blender'у для того, чтобы показать кнопки для плагина. Кнопки для плагина могут быть цифровыми для входных данных, текстовыми для коментариев и другой информации. Плагин может содержать не более 32 переменных.
Каждый элемент VarStruct состоит из типа (type), имени (name), диапазона информации (range information), и подсказки.
Переменная type определяет тип значения каждой кнопки, и способ её отображения. Для цифровых кнопок это значение должно быть комбинацией (ORed) INT или FLO для формата числа, и NUM, NUMSLI, или TOG, для типа кнопки. Текстовые кнопки должны иметь тип LABEL.
Имя, которое будет показано на (или около) кнопке, ограничено 15 символами.
Информация диапазона состоит из трёх вещественных чисел, которые определяют значения по умолчанию, максимум и минимум. Для кнопок переключения (TOG) мимнимум задаёт нажатое состояние, а максимум отжатое.
Переменная tip - это строка, которая будет показываться когда мышка будет задерживаться над кнопкой (если пользователь включил подсказки). Она ограничена 80 символами, и должна быть задана как нулевая строка (""), если не используется.
typedef struct Cast {...};
Структура cast используется в вызове функции doit, и служит для упрощения доступа ко всем данным плагина.
Она должна содержать целое и вещественное число для каждой кнопки, определённой в переменной varstr, включая текстовые кнопки. Обычно они имеют те же имена что и кнопки для справки.
float cfra
Значение cfra задаётся Blender'ом в текущее из предыдущего каждый проход рендеринга. Это значение определяется номером кадра +/- .5 в зависимости от настрооек.
plugin_seq_doit prototype
Функция plugin_seq_doit должна иметь прототип, чтобы её могла использовать функция getinfo. Вам не нужно изменять эту строку.
plugin_seq_getversion
Эта функция должна быть в каждом плагине, чтобы он мог правильно загружаться. Вам не нужно ёё изменять.
plugin_but_changed
Эта функция используется для обработки информации о кнопках, которые изменяет пользователь. Многие плагины не используют эту функцию. Она используется когда интерфейс позволяет пользователям изменять некоторые переменные, которые влияют на пересчёт данных плагина (например: таблица случайных хешев).
plugin_init
Если необходимо, то плагин может использовать эту функцию для инициализации внутренних данных. Примечание: Эта функция может вызываться несколько раз, если тот же самый плагин копируется. Не инициализируйте глобальные данные с помощью этой функции.
plugin_getinfo
Эта функция используется для передачи Blender'у информации. Вам никогда не нужно её изменять.
plugin_seq_doit
Функция последовательности doit отвечает за применение эффекта плагина и копирование пулученных данных в буфер вывода.
Аргументы
Cast *cast
Структура Cast, содержащая данные плагина, подробнее смотрите выше.
float facf0
Значения кривой IPO плагина для первого сдвига поля. Если пользователь не создал кривую IPO, её диапазон от 0 до 1 в течение действия плагина.
float facf1
Значения кривой IPO плагина для второго сдвига поля. Если пользователь не создал кривую IPO, её диапазон от 0 до 1 в течение действия плагина.
int x int y
Ширина и высота буфера изображения, соответственно.
Imbuf *ibuf1
Указатель на первый буфер изображения к которому привязан плагин. Это всегда должен быть допустимый буфер.
Imbuf *ibuf2
Указатель на второй буфер изображения к которому привязан плагин. Плагины используещие этот буфер должны проверять его на недопустимое значения.
Imbuf *out
Буфер для вывода.
Imbuf *use
Указатель на второй буфер изображения к которому привязан плагин. Плагины используещие этот буфер должны проверять его на недопустимое значения.
ImBuf image structure
Структура ImBuf всегда содержит 32 битные ABGR данные.
Эта структура всегда соответствует размеру, указанному в значениях x и y.
Взаимодействие с пользователем
Blender не может определить сколько ввходных значений плагин ожидает, поэтому для пользователя возможно прикреплять только одно значение для плагина, который ожидает два. По этой причине важно всегда проверять буферы, которые используются вашими плагинами, чтобы убедиться, что они допустимы. Плагин последовательности также должен включать текстовый ярлык, описывающий количество входных значений в кнопочном интерфейсе.
#include "plugin.h" |
Первый шаг, который необходимо сделать. Это решить что плагин будет делать и как пользователи будут с ним взаимодействовать. Для этого примера мы создадим простой фильтр, у которого будет иметь полосу прокрутки для интенсивности от 0 до 255. Если любое значение R,G, или B компоненты пиксела в исходном изображении меньше чем выбранная нами интенсивность. Будет возвращаться чёрный и альфа на полную. Сейчас мы скопируем наш базовый плагин в файл impfilt.c и дополним его.
Хорошая идея добавлять коментарии. Сперва сообщите пользователям что плагин делает, где они могут получить копию, с кем они должны связаться, чтобы сообщить об ошибке или пожеланиях, и лицензионные ограничениях. Используя коментарии, убедитесь в том, что вы используете коментарии такого типа /* */. Плагины и некоторые компиляторы C не допускают кометарии типа //.
/* |
Далее нам нужно заполнить имя, необходимо сохранить то имя, которое имеет файл с исходным кодом на C, описанный ранее, менее 23 знаков, без пробелов и в нижнем регистре.
char name[24]= "simpfilt.c"; |
Вот мы и закончили simpfilt.c
Относится к Blender v2.31
Скрипт bmake - это простая утилита, которая поможет в компиляции и разработке плагинов, её можно найти в подкаталоге plugins/ в корневом каталоге Blender'а. Она вызывается командой bmake (plugin_name.c) , после чего она попытаеся привязаться к нужным библиотекам и скомпилировать определённый файл на C соответственно вашей системе. Если вы пытаетесь разрабатывать плагины на Windows машине bmake не будет работать. Вы можете попытаться скомпилировать плагин используя указанное ниже (программу lcc), принимая на себя размещение плагина в каталоге c:\blender\plugins. Это пример того, как вы могли бы скомпилировать текстурный плагин sweep.c. Откройте командную строку DOS и сделайте следующее:
(Примечание: вы должны проверить, что каталог lcc\bin в ходит в переменную окружения PATH)
cd c:\blender\plugins\sequence\sweep |
Если ваша версия lcc не содержит файл implib, то комманда будет выглядеть так:
cd c:\blender\plugins\sequence\sweep |