You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

231 lines
9.1 KiB
HTML

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="utf-8" />
<base href="../../../" />
<script src="page.js"></script>
<link type="text/css" rel="stylesheet" href="page.css" />
</head>
<body>
<h1>[name]</h1>
<p class="desc">
关键帧轨道(KeyframeTrack)是关键帧([link:https://en.wikipedia.org/wiki/Key_frame keyframes])的定时序列,
它由时间和相关值的列表组成, 用来让一个对象的某个特定属性动起来。
</p>
<p>
在使用手册的“下一步”章节中“动画系统”一文对three.js动画系统中的不同元素作出了概述
</p>
<p>
和[link:https://github.com/mrdoob/three.js/wiki/JSON-Model-format-3 JSON model format]的动画层级相反,
关键帧轨道KeyframeTrack不会将单帧作为对象存储在“key”数组(一个存有每一帧的时间和值的地方)中。
</p>
<p>
关键帧轨道(KeyframeTrack)中总是存在两个数组:[page:.times times]数组按顺序存储该轨道的所有关键帧的时间值,而[page:.values values]数组包含动画属性的相应更改值。
</p>
<p>
值数组中的每一个成员,属于某一特定时间点,不仅可以是一个简单的数字,还可以是(比如)一个向量(如果是位置动画)或者是一个四元数(如果是旋转动画)。
因此,值数组(也是一个平面阵列)的长度可能是时间数组的三四倍。
</p>
<p>
与不同类型的动画值对应,存在若干关键帧轨道(KeyframeTrack)的子类,继承了它大多数属性和方法:
</p>
<ul>
<li>[page:BooleanKeyframeTrack]</li>
<li>[page:ColorKeyframeTrack]</li>
<li>[page:NumberKeyframeTrack]</li>
<li>[page:QuaternionKeyframeTrack]</li>
<li>[page:StringKeyframeTrack]</li>
<li>[page:VectorKeyframeTrack]</li>
</ul>
<p>
可以在[link:https://threejs.org/examples/jsm/animation/AnimationClipCreator.js AnimationClipCreator]文件中找到用不同类型的关键帧轨道创建动画剪辑([page:AnimationClip AnimationClips])的示例。
</p>
<p>
由于显式值仅针对存储在时间数组中的离散时间点指定,因此必须在两个时间点之间进行插值
</p>
<p>
轨道的名称对于这个轨道与动画节点的特定属性的连接(由[page:PropertyBinding]完成)很重要。
</p>
<h2>构造器</h2>
<h3>[name]( [param:String name], [param:Array times], [param:Array values], [param:Constant interpolation] )</h3>
<p>
[page:String name] - 关键帧轨道(KeyframeTrack)的标识符.<br />
[page:Array times] - 关键帧的时间数组, 被内部转化为
[link:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array Float32Array].<br />
[page:Array values] - 与时间数组中的时间点相关的值组成的数组, 被内部转化为
[link:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array Float32Array].<br />
[page:Constant interpolation] - 使用的插值类型。 参见
[page:Animation Animation Constants] for possible values. Default is [page:Animation InterpolateLinear].
</p>
<h2>属性</h2>
<h3>[property:String name]</h3>
<p>
轨道的名称可以指动画对象中的变形目标(morph targets)、骨骼([page:SkinnedMesh bones])或可能的其他值
查看[page:PropertyBinding.parseTrackName]可获知哪些形式的字符串可以解析出绑定的属性:
</p>
<p>
可以使用节点名称或uuid尽管它需要位于传递到混合器的场景图节点的子树中引用到某节点。或者 如果轨道名称的首字符是点,
该轨道会应用到传入到混合器的根节点上。
</p>
<p>
通常,在该节点之后会直接指定一个属性。 但是也可以再指定一个子属性, 例如 如果只是想通过浮动轨道使X组件旋转可使用 .rotation[x]。
</p>
<p>
还可以使用对象名称来指定骨骼或多材质,例如:.bones[R_hand].scale再比如材料数组中的第四个材料的漫反射颜色的红通道可以通过 .materials[3].diffuse[r]访问到。
</p>
<p>
属性绑定也会解析变形目标名称, 例如: .morphTargetInfluences[run]
</p>
<p>
说明: 轨道名称不一定得唯一。 多个轨道可驱动统一属性, 此时结果应该基于多个轨道之间根据其各自动作的权重的加权混合。
</p>
<h3>[property:Float32Array times]</h3>
<p>
一个[link:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array Float32Array]类型的值,由传入构造器中时间数组参数转化而来。
</p>
<h3>[property:Float32Array values]</h3>
<p>
一个[link:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array Float32Array]类型的值,
由传入构造器中值数组参数转化而来
</p>
<h3>[property:Constant DefaultInterpolation]</h3>
<p>
默认的参数插值类型: [page:Animation InterpolateLinear].
</p>
<h3>[property:Constant TimeBufferType ]</h3>
<p>
[link:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array Float32Array],
内部用于时间数组的缓冲区的类型
</p>
<h3>[property:Constant ValueBufferType ]</h3>
<p>
[link:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array Float32Array],
内部用于值数组的缓冲区的类型
</p>
<h2>方法</h2>
<h3>[method:KeyframeTrack clone]()</h3>
<p></p>
<h3>[method:Interpolant createInterpolant]()</h3>
<p>
根据传入构造器中的插值类型参数,创建线性插值([page:LinearInterpolant LinearInterpolant]),立方插值([page:CubicInterpolant CubicInterpolant])或离散插值
([page:DiscreteInterpolant DiscreteInterpolant])
</p>
<h3>[method:Interpolant getInterpolation]()</h3>
<p>
返回插值类型
</p>
<h3>[method:Number getValueSize]()</h3>
<p>
返回每个值的大小(即[page:.values values]数组的长度除以[page:.times times]数组的长度
</p>
<h3>[method:DiscreteInterpolant InterpolantFactoryMethodDiscrete]( [link:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array result] )</h3>
<p>
根据时间([page:KeyframeTrack.times times])和值([page:KeyframeTrack.times values])创建一个新的离散插值([page:DiscreteInterpolant DiscreteInterpolant])。
可传入一个Float32Array类型的变量来接收结果 否则会自动创建一个长度适宜的新数组。
</p>
<h3>[method:LinearInterpolant InterpolantFactoryMethodLinear]( [link:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array result] )</h3>
<p>
根据时间([page:KeyframeTrack.times times])和值([page:KeyframeTrack.times values])创建一个新的线性插值([page:LinearInterpolant LinearInterpolant])。
可传入一个Float32Array类型的变量来接收结果 否则会自动创建一个长度适宜的新数组。
</p>
<h3>[method:CubicInterpolant InterpolantFactoryMethodSmooth]( [link:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array result] )</h3>
<p>
根据时间([page:KeyframeTrack.times times])和值([page:KeyframeTrack.times values])创建一个新的立方插值([page:CubicInterpolant CubicInterpolant])。
可传入一个Float32Array类型的变量来接收结果 否则会自动创建一个长度适宜的新数组。
</p>
<h3>[method:this optimize]()</h3>
<p>
删除等效的顺序键,这些键在变形目标序列中很常见。
</p>
<h3>[method:this scale]()</h3>
<p>
缩放所有关键帧的时间。<br /><br />
说明: 这个方法很有用,例如, 可用于转化为某一特定帧率(正如[page:AnimationClip.CreateFromMorphTargetSequence animationClip.CreateFromMorphTargetSequence]内部所做的一样)。
</p>
<h3>[method:this setInterpolation]( [param:Constant interpolationType] )</h3>
<p>
设置插值类型。 参阅[page:Animation Animation Constants]以供选择。
</p>
<h3>[method:this shift]( [param:Number timeOffsetInSeconds] )</h3>
<p>
及时删除之前或之后的所有关键帧。
</p>
<h3>[method:this trim]( [param:Number startTimeInSeconds], [param:Number endTimeInSeconds] )</h3>
<p>
删除开始时间(startTime)之前以及结束时间(endTime)之后的关键帧,不改变[*startTime*, *endTime*]范围内的任何值。
</p>
<h3>[method:Boolean validate]()</h3>
<p>
在轨道上执行最小验证有效则返回true
</p>
<p>
如果出现以下情况,该方法会在控制台输出错误日志: 轨道为空; [page:.valueSize value size]值不可靠;
[page:.times times]数组或[page:.values values]数组中的元素不是数字;*times*数组中的元素乱序。
</p>
<h2>静态方法</h2>
<h3>[method:JSON toJSON]( [param:KeyframeTrack track] )</h3>
<p>
将该轨道转化为JSON
</p>
<h2>源码</h2>
<p>
[link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
</p>
</body>
</html>