KeyframeTrack - Руководство по Вердж3Д - Софт Эйт Софт
Description: Узнайте как использовать KeyframeTrack в интерактивных 3Д-веб-приложениях сделанных на Вердж3Д

# KeyframeTrack

KeyframeTrack - это последовательность ключевых кадров, состоящая из списков времен и связанных с ними значений, которая используется для анимации определенного свойства объекта.

Обзор элементов анимационной системы «Вердж3Д» находится в разделе Анимационная система настоящего руководства.

В KeyframeTrack всегда есть два массива: массив times хранит значения времени для всех ключевых кадров этого трека в последовательном порядке, а массив values values содержит соответствующие изменяющиеся значения анимированного свойства.

Одно значение, относящееся к определенному моменту времени, может быть не только простым числом, но и (например) вектором (если анимируется позиция) или кватернионом (если анимируется вращение). По этой причине массив values (который также является плоским массивом) может быть в три или четыре раза длиннее массива times.

В соответствии с различными возможными типами анимированных значений существует несколько подклассов KeyframeTrack, наследующих большинство свойств и методов:

- NumberKeyframeTrack
- QuaternionKeyframeTrack
- VectorKeyframeTrack

Поскольку явные значения задаются только для дискретных моментов времени, хранящихся в массиве times, все значения между ними должны быть интерполированы.

Имя дорожки важно для связи этой дорожки с определенным свойством анимированного узла (осуществляется с помощью PropertyBinding).

## Конструктор

### KeyframeTrack(name : String, times : Array, values : Array, interpolation : Constant)

- name — идентификатор для KeyframeTrack.
- times — массив времен ключевых кадров, преобразованный во Float32Array.
- values — массив со значениями, относящимися к массиву times, преобразованный во Float32Array.
- interpolation — тип используемой интерполяции. Возможные значения смотрите в разделе анимационные константы. По умолчанию InterpolateLinear.

## Свойства

### # .name : String

Имя дорожки может ссылаться на morph targets или bones или, возможно, на другие значения внутри анимированного объекта. Формы строк, которые могут быть разобраны для привязки свойств, см. в PropertyBinding.parseTrackName:

Имя может указывать на ноду либо по его имени, либо по его UUID (хотя он должен находиться в поддереве ноды графа сцены, переданного в микшер). Или, если имя дорожки начинается с точки, дорожка применяется к корневому узлу, который был передан в микшер.

Обычно после ноды непосредственно указывается свойство. Но можно указать и подсвойство, например .rotation[x], если вы хотите управлять только X-компонентой вращения через дорожку float.

Вы также можете указать кости или мультиматериалы, используя имя объекта, например: .bones[R_hand].scale; красный канал диффузного цвета четвертого материала в массиве материалов - в качестве еще одного примера - можно получить с помощью .materials[3].diffuse[r].

PropertyBinding также определяет имена целей морфа, например: .morphTargetInfluences[run].

Название трека не обязательно должно быть уникальным. Несколько дорожек могут управлять одним и тем же свойством.Результат должен быть основан на взвешенной комбинации между несколькими дорожками в соответствии с весами их соответствующих действий.

### # .times : Float32Array

Float32Array, преобразованный из массива times, который передается в конструкторе.

### # .values : Float32Array

Float32Array, преобразуется из массива значений, который передается в конструкторе.

### # .DefaultInterpolation : Constant

Тип интерполяции по умолчанию: InterpolateLinear.

### # .TimeBufferType : Constant

Float32Array, тип внутреннего буфера, используемого для времен.

### # .ValueBufferType : Constant

Float32Array, тип внутреннего буфера, используемого для значений.

## Методы

### # .clone() → KeyframeTrack

Возвращает копию этого трека.

### # .createInterpolant() → Interpolant

Создает LinearInterpolant, CubicInterpolant или DiscreteInterpolant, в зависимости от значения параметра интерполяции, переданного в конструкторе.

### # .getInterpolation() → Constant

Возвращает интерполяционный тип.

### # .getValueSize() → Integer

Возвращает размер каждого значения (то есть длину массива values values, деленную на длину массива times).

### # .InterpolantFactoryMethodDiscrete(result : Float32Array) → DiscreteInterpolant

Создает новый DiscreteInterpolant из times и values. Может быть передан массив Float32Array, который получит результаты. В противном случае будет автоматически создан новый массив соответствующего размера.

### # .InterpolantFactoryMethodLinear(result : Float32Array) → LinearInterpolant

Создает новый LinearInterpolant из times и values. Может быть передан массив Float32Array, который получит результаты. В противном случае будет автоматически создан новый массив соответствующего размера.

### # .InterpolantFactoryMethodSmooth(result : Float32Array) → CubicInterpolant

Создает новый CubicInterpolant из times и values. Может быть передан массив Float32Array, который получит результаты. В противном случае будет автоматически создан новый массив соответствующего размера.

### # .optimize() → this

Удаляет эквивалентные последовательные ключи, которые часто встречаются в целевых последовательностях морфа.

### # .scale() → this

Масштабирует время всех ключевых кадров на коэффициент.

Примечание: полезно, например, для преобразования к определенной частоте кадров в секунды (как это делается внутри animationClip.CreateFromMorphTargetSequence).

### # .setInterpolation(interpolationType : Constant) → this

Устанавливает тип интерполяции. Варианты выбора смотрите в Animation Constants.

### # .shift(timeOffsetInSeconds : Float) → this

Перемещает все ключевые кадры вперед или назад по времени.

### # .trim(startTimeInSeconds : Float, endTimeInSeconds : Float) → this

Удаляет ключевые кадры до `startTime` и после `endTime`, не изменяя никаких значений в диапазоне `[startTime, endTime]`.

### # .validate() → Boolean

Выполняет минимальную валидацию дорожек. Возвращает `true`, если они валидны.

Этот метод регистрирует ошибки в консоли, если дорожка пуста, если размер значения .valueSize не действителен, если элемент в массиве times или values values не является действительным числом или если элементы в массиве `times` расположены не по порядку.

## Исходный файл

О том как получить исходный код этого модуля читайте тут.