Three.js

Three.js

Анимация

      AnimationAction

AnimationActions планирует (составляет расписание, по которому происходит) выполнение анимаций, которые хранятся в AnimationClips.
Примечание: Большинство методов AnimationAction могут быть объединены в цепочки.
Обзор различных элементов системы анимации three.js можно найти в статье "Системы анимации" раздела "Следующие шаги" данного руководства.

Конструктор


AnimationAction( 
mixer - микшер, смеситель');" onmouseout="hide()">mixer
, clip, localRoot )

mixer - микшер, смеситель');" onmouseout="hide()">mixer
- AnimationMixer, который управляется данным действием.
clip - AnimationClip, что содержит данные анимации для этого действия.
localRoot - корневой объект, в котором выполняется данное действие.
Примечание: Вместо непосредственного вызова этого конструктора следует создавать экземпляр AnimationAction при помощи метода AnimationMixer.clipAction, поскольку для улучшения производительности он предоставляет кэширование.

Свойства



зажать (приостановить) по завершении');" onmouseout="hide()">.clampWhenFinished
Если clampWhenFinished установлен как true, анимация автоматически будет приостановлена на своем последнем кадре.
Если clampWhenFinished установлен как false, то когда закончится последний цикл действия, свойство enabled будет автоматически переключено в false, так что дальше это действие не будет оказывать никакого влияния.
Значением по умолчанию является false.
Примечание: clampWhenFinished не оказывает влияния, если действие прервано (свойство работает только в случае, когда последний цикл действия реально завершился).

.enabled
Установка enabled как false отключает данное действие, так что оно не будет оказывать никакого влияния. Значением по умолчанию является true.
Если действие включено повторно, анимация продолжится с её текущего времени, т.е. от значения свойства time (установка enabled как false не сбрасывает действие).
Примечание: Установка enabled как true не делает автоматического перезапуска анимации. Установка enabled как true сразу же перезапустит анимацию, если выполняется следующее условие: свойство paused установлено как false и в то же время это действие не было отключено (выполнением команды stop или reset), а также ни weight, ни timeScale не равны 0.

.loop
Цикличный режим (может быть изменен с помощью метода setLoop). Значением по умолчанию является константа THREE.LoopRepeat (с бесконечным числом повторений - свойство repetitions)
Значение должно быть одной из следующих констант:
THREE.LoopOnce - однократное воспроизведение клипа,
THREE.LoopRepeat - проигрывает клип выбранное количество раз (указанное в параметре repetitions), всякий раз переходя с конца клипа непосредственно на его начало,
THREE.LoopPingPong - воспроизводит клип выбранное количество раз (указанное в параметре repetitions), проигрывая его поочередно вперед и назад.

.paused
Установка значения paused как true приостанавливает выполнение данного действия, устанавливая шкалу эффективного времени в 0. Значением по умолчанию является false.

.repetitions
Число повторных выполнений AnimationClip в ходе данного действия. Может быть установлено с помощью метода setLoop. Значением по умолчанию является Infinity.
Установка данного числа не имеет эффекта если цикличный режим установлен как THREE.LoopOnce, т.е. однократное воспроизведение клипа.
Примечание: Первый запуск не учитывается. Например, если repetition установлен как 2, общее количество выполнений будет равно 3.

.time
Локальное (частное) время данного действия (в секундах, начиная с 0).
Значение получается "зажатым" или ограниченным в диапазоне 0...clip.duration (в соответствии с состоянием цикла). Его можно масштабировать относительно общего времени микшера, изменяя значение свойства timeScale (применением метода setEffectiveTimeScale или setDuration).

.timeScale
Коэффициент масштабирования для свойства time. Значение 0 приводит к приостановке анимации. Отрицательные значения вызывают воспроизведение анимации в обратном направлении. Значением по умолчанию является 1.
Свойства/методы связанные со свойством timeScale (и соответственно с time) следующие: getEffectiveTimeScale, halt, paused, setDuration, setEffectiveTimeScale, stopWarping, syncWith, warp.

.weight
Степень влияния данного действия (в интервале [0, 1]). Значения между 0 (нет влияния) и 1 (полноценное воздействие) могут использоваться для смешивания нескольких действий. Значением по умолчанию является 1.

Свойства/методы связанные со свойством weight следующие: crossFadeFrom, crossFadeTo, enabled, fadeIn, fadeOut, getEffectiveWeight, setEffectiveWeight, stopFading.

.zeroSlopeAtEnd
Включает гладкую интерполяцию без разделения клипов в начале, в цикле и в конце. Значением по умолчанию является true.

.zeroSlopeAtStart
Включает гладкую интерполяцию без разделения клипов в начале, в цикле и в конце. Значением по умолчанию является true.

Методы



cross fade from - перекрестное затухание из');" onmouseout="hide()">.crossFadeFrom
(
fade out action - затухающее действие');" onmouseout="hide()">fadeOutAction
, durationInSeconds, warpBoolean )
Метод вызывает постепенное нарастание данного действия и одновременное затухание другого действия, за время заданного (параметр durationInSeconds) интервала времени. Этот метод может быть включен в цепочку.
Если warpBoolean установлен как true, будут применено дополнительное деформирование (плавные изменения временны́х масштабов).
Примечание: Как и у fadeIn/fadeOut, затухание начинается/завершается с весом (т.е. свойством weight) равным 1.


cross fade to - перекрестное затухание в');" onmouseout="hide()">.crossFadeTo
(
fade in action - появляющееся действие');" onmouseout="hide()">fadeInAction
, durationInSeconds, warpBoolean )
Метод вызывает постепенное затухание данного действия и одновременное нарастание другого действия, за время заданного (параметр durationInSeconds) интервала времени. Этот метод может быть включен в цепочку.
Если warpBoolean установлен как true, будут применено дополнительное деформирование (плавные изменения временны́х масштабов).
Примечание: Как и у fadeIn/fadeOut, затухание начинается/завершается с весом (т.е. свойством weight) равным 1.

.fadeIn( durationInSeconds )
Метод постепенно увеличивает вес данного действия от 0 до 1, за указанный интервал времени. Этот метод может быть включен в цепочку.


fade out - постепенное исчезновение, затухание');" onmouseout="hide()">.fadeOut
( durationInSeconds )
Метод постепенно уменьшает вес данного действия от 0 до 1, за указанный интервал времени. Этот метод может быть включен в цепочку.


получить масштаб действующего времени');" onmouseout="hide()">.getEffectiveTimeScale
()
Метод возвращает действующий масштаб времени (с учетом текущих состояний деформации и приостановки.


- получить действующий вес');" onmouseout="hide()">.getEffectiveWeight
()
Метод возвращает действующий вес (с учетом текущих состояний затухания и возможного включения.


get clip - получить клип');" onmouseout="hide()">.getClip
()
Возвращает клип, содержащий данные анимации для данного действия.


get mixer - получить микшер');" onmouseout="hide()">.getMixer
()
Возвращает микшер, который ответственнен за воспроизведение данного действия.


get root - получить корень');" onmouseout="hide()">.getRoot
()
Возвращает корневой объект, на котором выполняется данное действие.


halt - остановка');" onmouseout="hide()">.halt
( .durationInSeconds )
Снижает скорость данной анимации до 0, постепенным уменьшением значения timeScale (начиная с его текущего значения), в течение заданного интервала времени (durationInSeconds). Этот метод может быть включен в цепочку.

.isRunning()
Возвращает значение true, если отсчет времени действия (свойство time) в настоящий момент уже запущен.
Кроме того, для выполнения активации в микшере (смотрите isScheduled) должны быть выполнены следующие условия: свойство paused должно быть установлено как false, enabled должно быть true, значение timeScale должно быть отличным от 0 и не должно быть запланировано отложенного запуска (startAt).
Примечание: Значение true у isRunning не обязательно означает, что анимацию на самом деле будет видно. Это будет только в случае, если у свойства weight установлено ненулевое значение.

.isScheduled()
Возвращает значение true, если данное действие активировано в микшере.
Примечание: Это не обязательно значит, что данная анимация на самом деле работает (сравните дополнительные условия для метода isRunning).


play - играть');" onmouseout="hide()">.play
()
Указывает микшеру активировать действие. Этот метод может быть включен в цепочку.
Примечание: Активация данного действия не обязательно означает, что анимация начнется тотчас же: Activating this action doesn’t necessarily mean that the animation starts immediately: If the action had already finished before (by reaching the end of its last loop), or if a time for a delayed start has been set (via [page:.startAt startAt), a [page:.reset reset must be executed first. Some other settings ([page:.paused paused=true, [page:.enabled enabled=false, [page:.weight weight=0, [page:.timeScale timeScale=0) can prevent the animation from playing, too.


reset - сбросить');" onmouseout="hide()">.reset
()
Сбрасывает действие. Этот метод может быть включен в цепочку.
Метод устанавливает свойство paused как false, enabled как true, time сбрасывается в 0, прерывает любое запланированное затухание и деформирование, удаляет внутренний счетчик цикла и планирование отложенного запуска.
Примечание: Метод reset всегда вызывается при вызове метода stop, но собственно сам reset не вызывает stop. Это означает, если нужно вызвать оба метода, сброса и остановки, не вызывайте reset; вместо него вызывайте stop.

.setDuration( durationInSeconds )
Устанавливает продолжительность отдельного цикла данного действия (путем настройки timeScale и останавливает любую запланированную деформацию - warp). Этот метод может быть включен в цепочку.


set effective time scale - установить
действующий масштаб времени');" onmouseout="hide()">.setEffectiveTimeScale
( timeScale )
Метод устанавливает timeScale и останавливает любую запланированную деформацию (warp). Этот метод может быть включен в цепочку.
Если paused установлено как false, действующий масштаб времени (внутреннее свойство) также будет установлен в это же значение; в противном случае действующий масштаб времени (непосредственно влияющий на анимацию в данный момент) будет установлен в 0. the effective time scale (an internal property) will also be set to this value; otherwise the effective time scale (directly affecting the animation at this moment) will be set to 0.
Примечание: .*paused* will not be switched to *true* automatically, if .*timeScale* is set to 0 by this method.


set effective weight - установить действующий вес');" onmouseout="hide()">.setEffectiveWeight
( weight )
Устанавливает weight и останавливает любое запланированное затухание. Sets the [page:.weight weight and stops any scheduled fading. Этот метод может быть включен в цепочку.
Если свойство enabled установлено как true If [page:.enabled enabled is true, the effective weight (an internal property) will also be set to this value; otherwise the effective weight (directly affecting the animation at this moment) will be set to 0.
Примечание: .*enabled* will not be switched to *false* automatically, if .*weight* is set to 0 by this method.


set loop - установка цикла');" onmouseout="hide()">.setLoop
( loopMode, repetitions )
Метод устанавливает режим цикла и количество повторений. Этот метод может быть включен в цепочку.

start at - начинать с');" onmouseout="hide()">.startAt
( startTimeInSeconds )
Метод определяет время задержки старта анимации (обычно передается как AnimationMixer.time + deltaTimeInSeconds). Этот метод может быть включен в цепочку.
Примечание: The animation will only start at the given time, if .*startAt* is chained with [page:.play play, or if the action has already been activated in the mixer (by a previous call of .*play*, without stopping or resetting it in the meantime).


stop - остановить');" onmouseout="hide()">.stop
()
Указывает микшеру деактивировать (отключить) данное действие. Этот метод может быть включен в цепочку.
Это действие будет немедленно остановлено и полностью сброшено.
Примечание: Можно остановить все активные действия на том же самом микшере сразу, при помощи метода mixer.stopAllAction.


stop fading - остановить затухание');" onmouseout="hide()">.stopFading
()
Метод останавливает любое запланированное затухание (fadeIn), примененное в данном действии. Этот метод может быть включен в цепочку.


stop warping - остановить деформацию');" onmouseout="hide()">.stopWarping
()
Метод останавливает любую запланированную деформацию (warp), примененную в данном действии. Этот метод может быть включен в цепочку.


syncWith это сокращ. англ. слов
synchronize with - синхронизировать с');" onmouseout="hide()">.syncWith
(
other action - другое действие');" onmouseout="hide()">otherAction
)
Метод синхронизирует данное действие с переданным в аргументе otherAction другим действием. Этот метод может быть включен в цепочку.
Синхронизация выполняется установкой значений time и timeScale данного действия к соответствующим значениям другого действия (прекращение любой запланированной деформации).
Примечание: Последующие изменения аргументов time и timeScale не будут обнаруживаться.


warp - деформация');" onmouseout="hide()">.warp
( startTimeScale, endTimeScale, durationInSeconds )
Метод изменяет скорость воспроизведения внутри переданного интервала времени, постепенным изменением значения timeScale от startTimeScale до endTimeScale. Этот метод может быть включен в цепочку.

События


Есть два события, показывающие когда завершается отдельный цикл действия и, соответственно, все действие целиком. На них можно реагировать с помощью:
mixer.addEventListener( 'loop', function( e ) { …} );
    // properties of e: type, action and loopDelta
    // свойствами для e должны быть тип, действие и loopDelta
mixer.addEventListener( 'finished', function( e ) { …} ); // properties of e: type, action and direction // свойствами для e должны быть тип, действие и направление

Исходники



      AnimationClip

AnimationClip - это многократно используемый набор треков ключевых кадров, представляющих анимацию.
Обзор различных элементов системы анимации three.js можно найти в статье "Системы анимации" раздела "Следующие шаги" данного руководства.

Конструктор


AnimationClip( name, duration, tracks )
name - имя данного клипа.
duration - продолжительность данного клипа (в секундах). Если передано отрицательное значение, продолжительность будет рассчитываться из переданного массива tracks.
Примечание: Вместо создания экземпляра AnimationClip непосредственно с помощью конструктора, для создания анимационных клипов можно использовать один из его статических методов: от JSON (parse), из Instead of instantiating an AnimationClip directly with the constructor, you can use one of its static methods to create AnimationClips: from JSON ([page:.parse parse), from morph target sequences ([page:.CreateFromMorphTargetSequence CreateFromMorphTargetSequence, [page:.CreateClipsFromMorphTargetSequences CreateClipsFromMorphTargetSequences) or from animation hierarchies ([page:.parseAnimation parseAnimation) - if your model doesn't already hold AnimationClips in its geometry's animations array.

Свойства


.duration
Продолжительность данного клипа (в секундах). Оно может быть вычислено из The duration of this clip (in seconds). This can be calculated from the [page:.tracks tracks array via [page:.resetDuration resetDuration.

.name
Имя данного клипа. Конкретный клип может быть найден с помощью метода
find by name - найти по имени');" onmouseout="hide()">findByName
.

.tracks
Массив, содержащий KeyframeTrack для каждого свойства, которые анимируются с помощью данного клипа.


unique identifier - универсальный
уникальный идентификатор');" onmouseout="hide()">.uuid

unique identifier - универсальный
уникальный идентификатор');" onmouseout="hide()">UUID
данного экземпляра клипа. Он присваивается автоматически и не должен быть изменен.
Вот статья Википедии про UUID на русском языке.

Методы



optimize - оптимизировать');" onmouseout="hide()">.optimize
()
Оптимизирует каждый трек путем удаления равнозначных последовательных ключей (которые являются общими в последовательности целей морфинга) Optimizes each track by removing equivalent sequential keys (which are common in morph target sequences).

.resetDuration()
Метод устанавливает продолжительность клипа как продолжительность самого длинного KeyframeTrack.


trim - обрезать, подстригать');" onmouseout="hide()">.trim
()
Метод обрезает все треки по времени продолжительности клипа.

Статические методы



создать клипы из последовательности целей морфинга');" onmouseout="hide()">.CreateClipsFromMorphTargetSequences
( name, morphTargetSequence, fps, noLoop )
Returns an array of new AnimationClips created from the [page:Geometry.morphTargets morph target sequences of a geometry, trying to sort morph target names into animation-group-based patterns like "Walk_001, Walk_002, Run_001, Run_002 ..."
This method is called by the [page:JSONLoader internally, and it uses [page:.CreateFromMorphTargetSequence CreateFromMorphTargetSequence.


create from morph target sequence - создать
из последовательности целей морфинга');" onmouseout="hide()">.CreateFromMorphTargetSequence
( name, morphTargetSequence, fps, noLoop )
Returns a new AnimationClip from the passed [page:Geometry.morphTargets morph targets array of a geometry, taking a name and the number of frames per second.
Примечание: Параметр fps обязателен, но скорость анимации в AnimationAction может быть переопределена методом animationAction.setDuration.


find by name - найти по имени');" onmouseout="hide()">.findByName
( objectOrClipArray, name )
Метод разыскивает AnimationClip по названию, принимая в качестве своего первого параметра либо массив анимационных клипов, либо сетку (Mesh), либо геометрию (Geometry), которые содержат массив, поименованный как "animations".


parse - разбор, синтаксический анализ, парсинг');" onmouseout="hide()">.parse
( json )
Parses a JSON representation of a clip and returns an AnimationClip.


parse animation - разобрать (т.е. сделать анализ) анимацию');" onmouseout="hide()">.parseAnimation
( animation, bones )
Метод производит разбор формата иерархии анимации и возвращает AnimationClip. Parses the animation.hierarchy format and returns an AnimationClip.

.toJSON( 
clip - клип, обрезать');" onmouseout="hide()">clip
)
Метод принимает AnimationClip и возвращает JSON-объект.

Исходники



      AnimationMixer

AnimationMixer - это проигрыватель для анимации конкретного объекта на сцене. Если на сцене независимо анимируется множество объектов, для всех объектов может использоваться один AnimationMixer.
Обзор различных элементов системы анимации three.js можно найти в статье "Системы анимации" раздела "Следующие шаги" данного руководства.

Конструктор


AnimationMixer( 
root object - корневой объект');" onmouseout="hide()">rootObject
)

root object - корневой объект');" onmouseout="hide()">rootObject
- объект, анимация которого должна воспроизводиться этим микшером.

Свойства


.time
Общее (глобальное) время микшера (в секундах; начиная с 0 в момент создания микшера).

.timeScale
Коэффициент масштабирования для общего (глобального) времени микшера.
Примечание: Установка параметра timeScale микшера в 0 и последующий возврат его к 1 - это возможность приостановки/возобновления (pause/unpause) всех действий, управляемых этим микшером.

Методы



clip action - действие клипа');" onmouseout="hide()">.clipAction
(
clip - клип');" onmouseout="hide()">clip
,
optional root - дополнительный корень');" onmouseout="hide()">optionalRoot
)
Возвращает AnimationAction для клипа, указанного в параметре clip, с дополнительным (необязательным) использованием корневого объекта, отличного от корневого объекта по умолчанию данного микшера. Первым параметром может быть либо объект AnimationClip, либо имя/название AnimationClip.
Если действие, связанное с этими параметрами, еще не существует, данным методом оно будет создано.
Примечание: Вызов этого метода несколько раз с одними и теми же параметрами всегда возвращает один и тот же экземпляр клипа.


existing action - существующее действие');" onmouseout="hide()">.existingAction
(
clip - клип');" onmouseout="hide()">clip
,
optional root - дополнительный корень');" onmouseout="hide()">optionalRoot
)
Возвращает существующее Returns an existing AnimationAction for the passed clip, optionally using a root object different from the mixer's default root.
Первым параметром может быть либо объект AnimationClip, либо имя AnimationClip.


get root - получить корень');" onmouseout="hide()">.getRoot
()
Возвращает корневой объект микшера.


stop all action - остановить все действие');" onmouseout="hide()">.stopAllAction
()
Деактивирует на этом микшере все ранее запланированные действия.


update - обновление');" onmouseout="hide()">.update
( deltaTimeInSeconds )
Advances the global mixer time and updates the animation.
This is usually done in the render loop, passing [page:Clock.getDelta clock.getDelta scaled by the mixer's [page:.timeScale timeScale).

.uncacheClip( 
clip - клип');" onmouseout="hide()">clip
)
Высвобождает все ресурсы памяти от клипа.

.uncacheRoot( 
root - корень');" onmouseout="hide()">root
)
Высвобождает все ресурсы памяти от корневого объекта.

.uncacheAction( 
clip - клип');" onmouseout="hide()">clip
,
optional root - дополнительный корень');" onmouseout="hide()">optionalRoot
)
Высвобождает все ресурсы памяти от действия.

Исходники



      AnimationObjectGroup

Группа объектов, которая получает общее состояние анимации.
Обзор различных элементов системы анимации three.js можно найти в статье "Системы анимации" раздела "Следующие шаги" данного руководства.

Применение


Add objects you would otherwise pass as 'root' to the constructor or the [page:AnimationMixer.clipAction clipAction method of [page:AnimationMixer AnimationMixer and instead pass this object as 'root'.
Обратите внимание, что объекты этого класса в микшере представлены как один объект, поэтому управление кэшем отдельных объектов должен выполняться в группе.

Ограничения


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

Конструктор


AnimationObjectGroup( obj1, obj2, obj3, ... )
obj - произвольное число сеток (meshes), с одинаковым состоянием анимации.

Свойства


.stats
Объект, который содержит некоторую информацию о данной AnimationObjectGroup (total number, number in use, number of bindings per object)

[property:String uuid
The [link:http://en.wikipedia.org/wiki/Universally_unique_identifier UUID of this *AnimationObjectGroup*. It gets automatically assigned and shouldn't be edited.

Методы


.add( obj1, obj2, obj3, ... )
Метод добавляет произвольное число объектов в данную AnimationObjectGroup.

.remove( obj1, obj2, obj3, ... )
Удаляет произвольное число объектов из данной AnimationObjectGroup.

.uncache( obj1, obj2, obj3, ... )
Высвобождает все ресурсы оперативной памяти для переданных объектов данной AnimationObjectGroup.

Исходники



      AnimationUtils

Объект с различными функциями для помощи при анимации, используется внутри. An object with various functions to assist with animations, used internally.

Методы

.arraySlice( array, from, to )
Это тоже самое, что и Array.prototype.slice, но при этом работает на типизированных массивах.
array (массив) - это массив, у которого берется часть, т.е. slice (часть, кусок),
from (от) - точка, с которой начинается slice,
to (до) - точка, которой заканчивается slice.

.convertArray( array, type, forceClone )
Конвертирует массив в указанный тип.

.flattenJSON( jsonKeys, times, values, valuePropertyName  )
Метод используется для разбора форматов ключевых кадров AOS. Used for parsing AOS keyframe formats.

.getKeyframeOrder( times )
Метод возвращает массив, по которому могут быть отсортированы времена и значения. Returns an array by which times and values can be sorted.

.isTypedArray( object )
Возвращает значение true, если объект является типизированным массивом.
.sortedArray( values, stride, order )
Сортирует массив, ранее возвращенный методом getKeyframeOrder.

Исходники



      KeyframeTrack

Трек ключевых кадров (KeyframeTrack) это, согласованная по времени показа, последовательность ключевых кадров (keyframes), которые состоят из списков моментов времени и связанных с ними значений, и которые используются для анимации определенного свойства объекта.
Примечание переводчика: вот перевод начала вышеприведенной статьи о ключевых кадрах.
... читать далее
Ключевой кадр в анимации и кинопроизводстве - это картинка, определяющая начальные и конечные точки любого плавного перехода. Эти картинки называются "кадрами", так как их положение во времени измеряется в кадрах на ленте кинопленки. Последовательность ключевых кадров определяет, какое движение будет видеть зритель, тогда как положение ключевых кадров на кинопленке, видео или анимации определяет время движения. Поскольку только два или три ключевых кадра в течение секунды не создадут иллюзию движения, оставшиеся кадры заполняются промежуточными изображениями (в мультипликации они называются «фазами »). Ключевые кадры определяет художник-мультипликатор. Созданием фаз в традиционной рисованной мультипликации занимается художник-фазовщик, в компьютерной анимации его роль выполняет программа.
Обзор различных элементов системы анимации three.js можно найти в статье "Системы анимации" раздела "Следующие шаги" данного руководства.

В отличие от иерархии анимации модели в формате JSON, KeyframeTrack не сохраняет свои отдельные ключевые кадры как объекты в массиве keys (ключи) (удерживая совместно моменты времени и значения для каждого кадра в одном месте). In contrast to the animation hierarchy of the [link:https://github.com/mrdoob/three.js/wiki/JSON-Model-format-3 JSON model format a *KeyframeTrack* doesn't store its single keyframes as objects in a "keys" array (holding the times and the values for each frame together in one place).

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

Instead of this there are always two arrays in a *KeyframeTrack*: the [page:.times times array stores the time values for all keyframes of this track in sequential order, and the [page:.values values array contains the corresponding changing values of the animated property.

Отдельное значение, принадлежащее конкретному моменту времени, может быть не только простым числом, но (например) вектором (если анимируется положение объекта) или кватернионом (если анимируется вращение объекта). По этой причине массив значений (который является также плоским массивом) A single value, belonging to a certain point of time, can not only be a simple number, but (for example) a vector (if a position is animated) or a quaternion (if a rotation is animated). For this reason the values array (which is a flat array, too) might be three or four times as long as the times array.

В соответствии с различными возможными типами анимированных значений существует несколько подклассов KeyframeTrack, наследующих большинство свойств и методов: Некоторые примеры создания вручную клипов анимации с разными видами ключевых кадров можно найти в файле. Поскольку явные значения определены только для дискретных точек времени, хранящихся в массиве времен, все промежуточные значения между ними должны быть интерполированы. Since explicit values are only specified for the discrete points of time stored in the times array, all values in between have to be interpolated.

Имя трека важно для соединения данного трека с конкретным свойством анимированного узла (сделанного PropertyBinding). The track's name is important for the connection of this track with a specific property of the animated node (done by [page:PropertyBinding).

Конструктор


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

Свойства


.name
The track's name can refer to [page:Geometry.morphTargets morph targets or [page:SkinnedMesh bones or possibly other values within an animated object. See [page:PropertyBinding.parseTrackName for the forms of strings that can be parsed for property binding:
The name can specify the node either using its name or its uuid (although it needs to be in the subtree of the scene graph node passed into the mixer). Or, if the track name starts with a dot, the track applies to the root node that was passed into the mixer.
Usually after the node a property will be specified directly. But you can also specify a subproperty, such as .rotation[x, if you just want to drive the X component of the rotation via a float track.
You can also specify bones or multimaterials by using an object name, for example: .bones[R_hand.scale; the red channel of the diffuse color of the fourth material in a materials array - as a further example - can be accessed with .materials[3.diffuse[r.
PropertyBinding will also resolve morph target names, for example: .morphTargetInfluences[run.
Примечание: Название трека необязательно должно быть уникальным. Несколько треков могут управлять одним и тем же свойством. The track's name does not necessarily have to be unique. Multiple tracks can drive the same property. The result should be based on a weighted blend between the multiple tracks according to the weights of their respective actions.

.times
Тип значения - Float32Array. Вот статья Википедии на русском языке. преобразован из массива времен, переданного в конструкторе. converted from the times array which is passed in the constructor.
.values
A [link:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array Float32Array, converted from the values array which is passed in the constructor.
[property:Constant DefaultInterpolation
The default interpolation type: [page:Animation InterpolateLinear.
[property:Constant TimeBufferType 
[link:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array Float32Array, the type of the buffer internally used for the times.
[property:Constant ValueBufferType 
[link:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array Float32Array, the type of the buffer internally used for the values.

Методы


.createInterpolant()
Метод, в зависимости от значения параметра интерполяции, переданного в конструкторе, создает Creates a [page:LinearInterpolant LinearInterpolant, [page:CubicInterpolant CubicInterpolant or [page:DiscreteInterpolant DiscreteInterpolant, depending on the value of the interpolation parameter passed in the constructor.
.getInterpolation()
Возвращает тип интерполяции.

[method:Number getValueSize()
Returns the size of each value (that is the length of the [page:.values values array divided by the length of the [page:.times times array).
[method:DiscreteInterpolant InterpolantFactoryMethodDiscrete( .result )
Creates a new [page:DiscreteInterpolant DiscreteInterpolant from the [page:KeyframeTrack.times times and [page:KeyframeTrack.times values. A Float32Array can be passed which will receive the results. Otherwise a new array with the appropriate size will be created automatically.
[method:null InterpolantFactoryMethodLinear( .result )
Creates a new [page:LinearInterpolant LinearInterpolant from the [page:KeyframeTrack.times times and [page:KeyframeTrack.times values. A Float32Array can be passed which will receive the results. Otherwise a new array with the appropriate size will be created automatically.
[method:null InterpolantFactoryMethodSmooth( .result )
Create a new [page:CubicInterpolant CubicInterpolant from the [page:KeyframeTrack.times times and [page:KeyframeTrack.times values. A Float32Array can be passed which will receive the results. Otherwise a new array with the appropriate size will be created automatically.
[method:null optimize()
Removes equivalent sequential keys, which are common in morph target sequences. Called automatically by the constructor.
[method:null scale()
Scales all keyframe times by a factor.
Примечание: This is useful, for example, for conversions to a certain rate of frames per seconds (as it is done internally by [page:AnimationClip.CreateFromMorphTargetSequence animationClip.CreateFromMorphTargetSequence).
.setInterpolation( interpolationType )
Метод устанавливает тип интерполяции. Для выбора смотрите Анимационные константы.

.shift( timeOffsetInSeconds )
Передвигает все ключевые кадры (keyframes) либо вперед, либо назад во времени.

.trim( startTimeInSeconds, endTimeInSeconds )
Метод удаляет ключевые кадры перед startTime и после endTime, без изменения каких-либо значений в диапазоне [startTime, endTime].

.validate( )
Performs minimal validation on the tracks. Called automatically by the constructor.
This method logs errors to the console, if a track is empty, if the [page:.valueSize value size is not valid, if an item in the [page:.times times or [page:.values values array is not a valid number or if the items in the *times* array are out of order.

Статические методы


[method:KeyframeTrack parse( [page:JSON json )
Parses a JSON object and returns a new keyframe track of the correct type.
[method:JSON toJSON( [page:KeyframeTrack track )
Converts the track to JSON.

Исходники



KeyframeTrack →

BooleanKeyframeTrack

Трек логических значений ключевых кадров.

Конструктор

BooleanKeyframeTrack( name, times, values )
name - (required) identifier for the KeyframeTrack.
times - (required) array of keyframe times.
values - values for the keyframes at the times specified.

Свойства

Для ознакомления с унаследованными свойствами смотрите описание KeyframeTrack.

.DefaultInterpolation
The default interpolation type to use, [page:Animation InterpolateDiscrete.

.ValueBufferType
A normal Array (no Float32Array in this case, unlike *ValueBufferType* of [page:KeyframeTrack).

.ValueTypeName
String 'bool'.

Методы

Для ознакомления с унаследованными методами смотрите описание KeyframeTrack.

.InterpolantFactoryMethodLinear( )
The value of this method here is 'undefined', as it does not make sense for discrete properties.

.InterpolantFactoryMethodSmooth( )
The value of this method here is 'undefined', as it does not make sense for discrete properties.

Исходники



KeyframeTrack →

ColorKeyframeTrack

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

Конструктор

ColorKeyframeTrack( name, times, values )
name - (обязателен) идентификатор KeyframeTrack.
times - (обязателен) массив времен ключевого кадра.
values - значения для ключевых кадров в указанное время.
[page:Constant interpolation - the type of interpolation to use. See [page:Animation Animation Constants for possible values. Default is [page:Animation InterpolateLinear.

Свойства

Для ознакомления с унаследованными свойствами смотрите описание KeyframeTrack.

.ValueTypeName
Строка 'color' - цвет.

Методы

Для ознакомления с унаследованными методами смотрите описание KeyframeTrack.

Исходники



KeyframeTrack →

NumberKeyframeTrack

Трек числовых значений ключевых кадров.

Конструктор

NumberKeyframeTrack( name, times, values )
[page:String name - (required) identifier for the KeyframeTrack.
[page:Array times - (required) array of keyframe times.
[page:Array values - values for the keyframes at the times specified.
[page:Constant interpolation - the type of interpolation to use. See [page:Animation Animation Constants for possible values. Default is [page:Animation InterpolateLinear.

Свойства

Для ознакомления с унаследованными свойствами смотрите описание KeyframeTrack.
[property:String ValueTypeName
String 'number'.

Методы

Для ознакомления с унаследованными методами смотрите описание KeyframeTrack.

Исходники



KeyframeTrack →

QuaternionKeyframeTrack

A Track of quaternion keyframe values.

Конструктор

QuaternionKeyframeTrack( name, times, values )

[page:String name (required) identifier for the KeyframeTrack.
[page:Array times (required) array of keyframe times.
[page:Array values values for the keyframes at the times specified.
[page:Constant interpolation the type of interpolation to use. See [page:Animation Animation Constants for possible values. Default is [page:Animation InterpolateLinear.

Свойства

Для ознакомления с унаследованными свойствами смотрите описание KeyframeTrack.

[property:Constant DefaultInterpolation
The default interpolation type to use, [page:Animation InterpolateLinear.
[property:String ValueTypeName
String 'quaternion'.

Методы

Для ознакомления с унаследованными методами смотрите описание KeyframeTrack.

[method:null InterpolantFactoryMethodLinear()
Returns a new [page:QuaternionLinearInterpolant QuaternionLinearInterpolant based on the [page:KeyframeTrack.values values, [page:KeyframeTrack.times times and [page:KeyframeTrack.valueSize valueSize of the keyframes.

Исходники



KeyframeTrack →

StringKeyframeTrack

Трек строковых значений ключевых кадров.

Конструктор

StringKeyframeTrack( name, times, values )
[page:String name - (required) identifier for the KeyframeTrack.
[page:Array times - (required) array of keyframe times.
[page:Array values - values for the keyframes at the times specified.
[page:Constant interpolation - the type of interpolation to use. See [page:Animation Animation Constants for possible values. Default is [page:Animation InterpolateDiscrete.

Свойства

Для ознакомления с унаследованными свойствами смотрите описание KeyframeTrack.

[property:Constant DefaultInterpolation

The default interpolation type to use, [page:Animation InterpolateDiscrete.

[property:Array ValueBufferType

A normal Array (no Float32Array in this case, unlike *ValueBufferType* of [page:KeyframeTrack).
[property:String ValueTypeName
String 'string'.

Методы

Для ознакомления с унаследованными методами смотрите описание KeyframeTrack.

[method:null InterpolantFactoryMethodLinear()
The value of this method here is 'undefined', as it does not make sense for discrete properties.
[method:null InterpolantFactoryMethodSmooth()
The value of this method here is 'undefined', as it does not make sense for discrete properties.

Исходники



KeyframeTrack →

VectorKeyframeTrack

Трек векторных значений ключевых кадров.

Конструктор

VectorKeyframeTrack( name, times, values )
[page:String name - (required) identifier for the KeyframeTrack.
[page:Array times - (required) array of keyframe times.
[page:Array values - values for the keyframes at the times specified.
[page:Constant interpolation - the type of interpolation to use. See [page:Animation Animation Constants for possible values. Default is [page:Animation InterpolateLinear.

Свойства

Для ознакомления с унаследованными свойствами смотрите описание KeyframeTrack.

.ValueTypeName
String 'vector'.

Методы

Для ознакомления с унаследованными методами смотрите описание KeyframeTrack.

Исходники



      PropertyBinding

This holds a reference to a real property in the scene graph; used internally.

Конструктор

PropertyBinding( rootNode, path, parsedPath )
-- rootNode: -- path -- parsedPath (optional)

Свойства


Методы


.getValue( targetArray, offset )


.setValue( sourceArray, offset )


.bind( )
Создает пару getter / setter (получатель / установщик) для свойства в Create getter / setter pair for a property in the scene graph. Используется внутри методами getValue и setValue.

.unbind( )
Отвязывает пару getter / setter (получатель / установщик) для свойства в Unbind getter / setter pair for a property in the scene graph.

[method:Constructor Composite( targetGroup, path, optionalParsedPath )
Create a new Composite PropertyBinding.

[method:Constructor create( root, path, parsedPath )
Create a new Composite PropertyBinding (if root is an [page:AnimationObjectGroup) or PropertyBinding.

[method:Constructor parseTrackName( trackName )
Matches strings in the following forms:
-- nodeName.property
-- nodeName.property[accessor]
-- nodeName.material.property[accessor]
-- uuid.property[accessor]
-- uuid.objectName[objectIndex].propertyName[propertyIndex]
-- parentName/nodeName.property
-- parentName/parentName/nodeName.property[index]
-- .bone[Armature.DEF_cog].position
-- scene:helium_balloon_model:helium_balloon_model.position

[method:Constructor findNode( root, nodeName )
Find a node in a node tree or [page:Skeleton Skeleton.

Исходники



      PropertyMixer

Buffered scene graph property that allows weighted accumulation; used internally.

Конструктор

PropertyMixer( binding, typeName, valueSize )
-- binding
-- typeName
-- valueSize

Свойства


.binding


.buffer
Буфер размером Buffer with size
value size - размер значения');" onmouseout="hide()">valueSize
* 4
.
Свойство имеет такую схему: [ incoming | accu0 | accu1 | orig ]
Интерполяторы могут использовать свойство buffer в качестве своего result и затем данные передавать в incoming. Interpolators can use .buffer as their .result and the data then goes to 'incoming'.
accu0 и accu1 are used frame-interleaved for the cumulative result and are compared to detect changes.
orig сохраняет исходное состояние свойства.

.cumulativeWeight
Значение по умолчанию равно 0.

.valueSize


.referenceCount
Значение по умолчанию равно 0.

.useCount
Значение по умолчанию равно 0.

Методы


.accumulate( accuIndex, weight )
Accumulate data in [page:PropertyMixer.buffer buffer[accuIndex] 'incoming' region into 'accu[i]'.
Если вес (параметр weight) равен 0, то не делается ничего.

.apply( accuIndex )
Apply the state of buffer 'accu[i]' to the binding when accus differ.

.saveOriginalState( )
Запоминает состояние связанного свойства и копирует его в оба накопителя (accu).

.restoreOriginalState(  )
Метод применяет к привязке состояние, ранее взятое с помощью метода saveOriginalState.

Исходники