ddd.skelet

Модуль, определяющий класс Скелет, который позволяет выполнять скелетную анимацию на 3D-объектах. Пользователю обычно требуется только создать скелет (посредством загрузки из файла) и присоединить его к мешу. Все дальнейшие действия, связанные с анимацими, выполняются через анимированный меш.

В модуле определено несколько вспомогательных структур, используемых внутри класса Скелет. Также определён класс ресурсов ЗагруженныеСкелеты, позволяющий получать объекты Скелет из файлов-ресурсов специального бинарного формата с расширением ".sk". Экземпляр этого класса присутствует в объекте DDDМенеджер. Рекомендуется получать объекты класса Скелет через него.

  • enum ТипыКривыхАнимации: ushort;

    Константы, определяющие 10 типов кривых анимации. Их можно объединять через операцию |.

  • enum ТипыИзменения: ushort;

    Константы, определяющие типы изменений при анимации, т.е. положение, ориентация или масштаб. Их можно объединять через операцию |.

  • class СкелетИсключение: object.Exception;

    Класс исключений, которые могут случиться при работе объектов класса Скелет.

  • struct НачальнаяКость;

    Структура, определяющая начальное положение и ориентацию кости скелета.

  • struct АнимированнаяКость;

    Структура, определяющая анимацию кости скелета.

  • struct Анимация;

    Структура, в которой содержится информация о единице анимации (или, иначе, о "действии"). В анимации определены номера начального и конечного кадра, задействуется определённый набор костей (какие именно, задаётся в массиве диспетчер_кривых), и массив кривых анимации. Размеры массивов должны совпадать, одинаковые индексы массивов относятся к анимации одной и той же кости.

    • short стартовый_кадр;

      Номер начального кадра

    • short конечный_кадр;

      Номер последнего кадра

    • ДиспетчерКривых[] диспетчер_кривых;

      Массив, в котором определяется к какой кости (по номеру) в скелете относится каждая из кривых, и какого типа эта кривая (в соответствии с перечислением ТипыКривыхАнимации).

    • float[][] кривые;

      Массив с кривыми анимации

    • string toString();

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

  • struct СостояниеАнимацииКости;

    Структура, определяющая текущее положение отдельной кости

  • 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 в противном случае.