KeyframeTrack - это последовательность ключевых кадров, состоящая из списков времен и связанных с ними значений, которая используется для анимации определенного свойства объекта.
Обзор элементов анимационной системы «Вердж3Д» находится в разделе Анимационная система настоящего руководства.
В KeyframeTrack всегда есть два массива: массив times хранит значения времени для всех ключевых кадров этого трека в последовательном порядке, а массив values values содержит соответствующие изменяющиеся значения анимированного свойства.
Одно значение, относящееся к определенному моменту времени, может быть не только простым числом, но и (например) вектором (если анимируется позиция) или кватернионом (если анимируется вращение). По этой причине массив values (который также является плоским массивом) может быть в три или четыре раза длиннее массива times.
В соответствии с различными возможными типами анимированных значений существует несколько подклассов KeyframeTrack, наследующих большинство свойств и методов:
Поскольку явные значения задаются только для дискретных моментов времени, хранящихся в массиве times, все значения между ними должны быть интерполированы.
Имя дорожки важно для связи этой дорожки с определенным свойством анимированного узла (осуществляется с помощью PropertyBinding).
Имя дорожки может ссылаться на morph targets или bones или, возможно, на другие значения внутри анимированного объекта. Формы строк, которые могут быть разобраны для привязки свойств, см. в PropertyBinding.parseTrackName:
Имя может указывать на ноду либо по его имени, либо по его UUID (хотя он должен находиться в поддереве ноды графа сцены, переданного в микшер). Или, если имя дорожки начинается с точки, дорожка применяется к корневому узлу, который был передан в микшер.
Обычно после ноды непосредственно указывается свойство. Но можно указать и подсвойство, например .rotation[x], если вы хотите управлять только X-компонентой вращения через дорожку float.
Вы также можете указать кости или мультиматериалы, используя имя объекта, например: .bones[R_hand].scale; красный канал диффузного цвета четвертого материала в массиве материалов - в качестве еще одного примера - можно получить с помощью .materials[3].diffuse[r].
PropertyBinding также определяет имена целей морфа, например: .morphTargetInfluences[run].
Название трека не обязательно должно быть уникальным. Несколько дорожек могут управлять одним и тем же свойством.Результат должен быть основан на взвешенной комбинации между несколькими дорожками в соответствии с весами их соответствующих действий.
Float32Array, преобразованный из массива times, который передается в конструкторе.
Float32Array, преобразуется из массива значений, который передается в конструкторе.
Тип интерполяции по умолчанию: InterpolateLinear.
Float32Array, тип внутреннего буфера, используемого для времен.
Float32Array, тип внутреннего буфера, используемого для значений.
Возвращает копию этого трека.
Создает LinearInterpolant, CubicInterpolant или DiscreteInterpolant, в зависимости от значения параметра интерполяции, переданного в конструкторе.
Возвращает интерполяционный тип.
Возвращает размер каждого значения (то есть длину массива values values, деленную на длину массива times).
Создает новый DiscreteInterpolant из times и values. Может быть передан массив Float32Array, который получит результаты. В противном случае будет автоматически создан новый массив соответствующего размера.
Создает новый LinearInterpolant из times и values. Может быть передан массив Float32Array, который получит результаты. В противном случае будет автоматически создан новый массив соответствующего размера.
Создает новый CubicInterpolant из times и values. Может быть передан массив Float32Array, который получит результаты. В противном случае будет автоматически создан новый массив соответствующего размера.
Удаляет эквивалентные последовательные ключи, которые часто встречаются в целевых последовательностях морфа.
Масштабирует время всех ключевых кадров на коэффициент.
Примечание: полезно, например, для преобразования к определенной частоте кадров в секунды (как это делается внутри animationClip.CreateFromMorphTargetSequence).
Устанавливает тип интерполяции. Варианты выбора смотрите в Animation Constants.
Перемещает все ключевые кадры вперед или назад по времени.
Удаляет ключевые кадры до startTime и после endTime, не изменяя никаких значений в диапазоне [startTime, endTime].
Выполняет минимальную валидацию дорожек. Возвращает true, если они валидны.
Этот метод регистрирует ошибки в консоли, если дорожка пуста, если размер значения .valueSize не действителен, если элемент в массиве times или values values не является действительным числом или если элементы в массиве times расположены не по порядку.
О том как получить исходный код этого модуля читайте тут.