ddd.skelet
Модуль, определяющий класс Скелет, который позволяет выполнять скелетную анимацию на 3D-объектах. Пользователю обычно требуется только создать скелет (посредством загрузки из файла) и присоединить его к мешу. Все дальнейшие действия, связанные с анимацими, выполняются через анимированный меш.
В модуле определено несколько вспомогательных структур, используемых внутри класса Скелет. Также определён класс ресурсов ЗагруженныеСкелеты, позволяющий получать объекты Скелет из файлов-ресурсов специального бинарного формата с расширением ".sk". Экземпляр этого класса присутствует в объекте DDDМенеджер. Рекомендуется получать объекты класса Скелет через него.
-
enum
ТипыКривыхАнимации
: ushort;Константы, определяющие 10 типов кривых анимации. Их можно объединять через операцию |.
-
enum
ТипыИзменения
: ushort;Константы, определяющие типы изменений при анимации, т.е. положение, ориентация или масштаб. Их можно объединять через операцию |.
-
class
СкелетИсключение
: object.Exception;Класс исключений, которые могут случиться при работе объектов класса Скелет.
-
struct
НачальнаяКость
;Структура, определяющая начальное положение и ориентацию кости скелета.
-
struct
АнимированнаяКость
;Структура, определяющая анимацию кости скелета.
-
struct
Анимация
;Структура, в которой содержится информация о единице анимации (или, иначе, о "действии"). В анимации определены номера начального и конечного кадра, задействуется определённый набор костей (какие именно, задаётся в массиве диспетчер_кривых), и массив кривых анимации. Размеры массивов должны совпадать, одинаковые индексы массивов относятся к анимации одной и той же кости.
-
short
стартовый_кадр
;Номер начального кадра
-
short
конечный_кадр
;Номер последнего кадра
-
ДиспетчерКривых[]
диспетчер_кривых
;Массив, в котором определяется к какой кости (по номеру) в скелете относится каждая из кривых, и какого типа эта кривая (в соответствии с перечислением ТипыКривыхАнимации).
-
float[][]
кривые
;Массив с кривыми анимации
-
string
toString
();Вывод структуры в строковое представление. Осторожно, может быть очень длинный результат!
-
-
struct
СостояниеАнимацииКости
;Структура, определяющая текущее положение отдельной кости
-
НачальнаяКость
начальное_состояние
;Положение кости без применения каких-либо анимаций
-
ushort
типы_изменения
;Какому типу изменений подверглась кость (см. константу ТипыИзменения)
-
Вектор3
изменение_положения
;Вектор сдвига
-
Кватернион
изменение_ориентации
;Кватернион поворота
-
Вектор3
изменение_масштаба
;Вектор масштабирования
-
string
toString
();Вывод структуры в строковое представление.
-
-
const СостояниеАнимацииКости
СОСТОЯНИЕ_БЕЗ_ИЗМЕНЕНИЙ
;Константа типа СостояниеАнимацииКости, определяющая вуртуальную кость с нулевым воздействием на меш, т.е. кость, стоящую в точке с нулевыми координатами, без поворота, и не подвергнувшуюся никаким анимациям.
-
string
состояние_анимации_в_строку
(СостояниеАнимацииКости[string]состояние_анимации
);Вывод ассоциативного массива с состояниями анимации костей в строковое представление
-
class
Скелет
;Класс, определяющий упорядоченный набор костей и их анимаций. Используется для анимаций 3D-объектов, в данный момент такие анимации возможно применять только к классу МешСоСкелетом.
-
this(string
имя_файла_скелета
);Коструктор, принимающий имя файла с данными скелета и его анимаций.
-
string
toString
();Вывод информации о скелете в строковое представление
-
СостояниеАнимацииКости[string]
получить_состояние_анимации
(stringназвание_анимации
, floatположение_кадра
);Функция, возвращающая состояние костей в определённый момент анимации
Параметры:
string
название_анимации
Имя используемой анимации (или, иначе, "действия").
float
положение_кадра
Для какого кадра требуется получить состояние. Может быть нецелым числом, в этом случае используется линейная интерполяция.
Исключения:
RangeError, если анимация с таким именем отсутсвует.
-
СостояниеАнимацииКости[string]
объединить_состояния_анимации
(stringназвание_анимации1
, floatположение_кадра1
, stringназвание_анимации2
, floatположение_кадра2
, floatкоэффициент
);Вывод информации о состояниях костей при применении двух анимаций одновременно.
Параметры:
string
название_анимации1
Имя первой используемой анимации (или, иначе, "действия").
float
положение_кадра1
Для какого кадра первой анимации требуется получить состояние.
string
название_анимации2
Имя второй используемой анимации (или, иначе, "действия").
float
положение_кадра2
Для какого кадра второй анимации требуется получить состояние.
float
коэффициент
Если вычисляется состояние кости, которая участвует в обеих анимациях, то этот параметр используется как
коэффициент
интерполяции между ними. Если кость, для которой вычисляется состояние, используется только в одной из анимаций, то этот параметр не используется.Исключения:
RangeError, если
название_анимации1
илиназвание_анимации2
отсутствует в списке анимаций скелета.
-
-
class
ЗагруженныеСкелеты
: ddd.resources.ЗагруженныеРесурсы!(Скелет).ЗагруженныеРесурсы;Класс-контейнер ресурсов объектов класса Скелет.
Экземпляр этого класса присутствует в объекте DDDМенеджер. Рекомендуется получать объекты класса Скелет через него.
-
this(ИменаРесурсов
имена_ресурсов0
);Конструктор, принимающий ссылку на объект типа ИменаРесурсов, в котором уже должны храниться имена всех доступных файлов ресурсов.
-
protected bool
загрузить_один
(stringимя
);Функция загрузки в контейнер одного файла с ресурсом.
Возвращаемое значение:
true
, если файл удачно загрузился,false
в противном случае.
-