KeyframeTrack - это последовательность keyframes, состоящая из списков времен и связанных с ними значений, которая используется для анимации определенного свойства объекта.
Обзор различных элементов системы анимации Verge3D смотрите в статье "Animation System" в разделе "Next Steps" руководства.
В KeyframeTrack всегда есть два массива: массив times хранит значения времени для всех ключевых кадров этого трека в последовательном порядке, а массив values values содержит соответствующие изменяющиеся значения анимированного свойства.
Одно значение, относящееся к определенному моменту времени, может быть не только простым числом, но и (например) вектором (если анимируется позиция) или кватернионом (если анимируется вращение). По этой причине массив values (который также является плоским массивом) может быть в три или четыре раза длиннее массива times.
В соответствии с различными возможными типами анимированных значений существует несколько подклассов KeyframeTrack, наследующих большинство свойств и методов:
Некоторые примеры того, как вручную создавать AnimationClip с различными видами KeyframeTracks, можно найти в файле AnimationClipCreator.
Поскольку явные значения задаются только для дискретных моментов времени, хранящихся в массиве times, все значения между ними должны быть интерполированы.
Имя дорожки важно для связи этой дорожки с определенным свойством анимированного узла (осуществляется с помощью PropertyBinding).
name — идентификатор для KeyframeTrack.
times — массив времен ключевых кадров, преобразованный внутри
Float32Array.
values — массив со значениями, относящимися к массиву times, преобразованный внутри
Float32Array.
interpolation — тип используемой интерполяции. Возможные значения смотрите в Animation Constants. По умолчанию InterpolateLinear.
Имя дорожки может ссылаться на morph targets или bones или, возможно, на другие значения внутри анимированного объекта. Формы строк, которые могут быть разобраны для привязки свойств, см. в PropertyBinding.parseTrackName:
Имя может указывать на ноду либо по его имени, либо по его uuid (хотя он должен находиться в поддереве ноды графа сцены, переданного в микшер). Или, если имя дорожки начинается с точки, дорожка применяется к корневому узлу, который был передан в микшер.
Обычно после ноды непосредственно указывается свойство. Но можно указать и подсвойство, например .rotation[x], если вы хотите управлять только X-компонентой вращения через дорожку float.
Вы также можете указать кости или мультиматериалы, используя имя объекта, например: .bones[R_hand].scale; красный канал диффузного цвета четвертого материала в массиве материалов - в качестве еще одного примера - можно получить с помощью .materials[3].diffuse[r].
PropertyBinding также определяет имена целей морфа, например: .morphTargetInfluences[run].
Примечание: Название трека не обязательно должно быть уникальным. Несколько дорожек могут управлять одним и тем же свойством.Результат должен быть основан на взвешенной комбинации между несколькими дорожками в соответствии с весами их соответствующих действий.
A Float32Array, преобразованный из массива times, который передается в конструкторе.
A 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 расположены не по порядку.
О том как получить исходный код этого модуля читайте тут.