KeyframeTrack.html 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8" />
  5. <base href="../../../" />
  6. <script src="list.js"></script>
  7. <script src="page.js"></script>
  8. <link type="text/css" rel="stylesheet" href="page.css" />
  9. </head>
  10. <body>
  11. <h1>[name]</h1>
  12. <p class="desc">
  13. 关键帧轨道(KeyframeTrack)是关键帧([link:https://en.wikipedia.org/wiki/Key_frame keyframes])的定时序列,
  14. 它由时间和相关值的列表组成, 用来让一个对象的某个特定属性动起来。
  15. </p>
  16. <p>
  17. 在使用手册的“下一步”章节中,“动画系统”一文对three.js动画系统中的不同元素作出了概述
  18. </p>
  19. <p>
  20. 和[link:https://github.com/mrdoob/three.js/wiki/JSON-Model-format-3 JSON model format]的动画层级相反,
  21. 关键帧轨道(KeyframeTrack)不会将单帧作为对象存储在“key”数组(一个存有每一帧的时间和值的地方)中。
  22. </p>
  23. <p>
  24. 关键帧轨道(KeyframeTrack)中总是存在两个数组:[page:.times times]数组按顺序存储该轨道的所有关键帧的时间值,而[page:.values values]数组包含动画属性的相应更改值。
  25. </p>
  26. <p>
  27. 值数组中的每一个成员,属于某一特定时间点,不仅可以是一个简单的数字,还可以是(比如)一个向量(如果是位置动画)或者是一个四元数(如果是旋转动画)。
  28. 因此,值数组(也是一个平面阵列)的长度可能是时间数组的三四倍。
  29. </p>
  30. <p>
  31. 与不同类型的动画值对应,存在若干关键帧轨道(KeyframeTrack)的子类,继承了它大多数属性和方法:
  32. </p>
  33. <ul>
  34. <li>[page:BooleanKeyframeTrack]</li>
  35. <li>[page:ColorKeyframeTrack]</li>
  36. <li>[page:NumberKeyframeTrack]</li>
  37. <li>[page:QuaternionKeyframeTrack]</li>
  38. <li>[page:StringKeyframeTrack]</li>
  39. <li>[page:VectorKeyframeTrack]</li>
  40. </ul>
  41. <p>
  42. 可以在[link:https://threejs.org/examples/js/AnimationClipCreator.js]文件中找到用不同类型的关键帧轨道创建动画剪辑([page:AnimationClip AnimationClips])的示例。
  43. </p>
  44. <p>
  45. 由于显式值仅针对存储在时间数组中的离散时间点指定,因此必须在两个时间点之间进行插值
  46. </p>
  47. <p>
  48. 轨道的名称对于这个轨道与动画节点的特定属性的连接(由[page:PropertyBinding]完成)很重要。
  49. </p>
  50. <h2>构造器</h2>
  51. <h3>[name]( [param:String name], [param:Array times], [param:Array values], [param:Constant interpolation] )</h3>
  52. <p>
  53. [page:String name] - 关键帧轨道(KeyframeTrack)的标识符.<br />
  54. [page:Array times] - 关键帧的时间数组, 被内部转化为
  55. [link:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array Float32Array].<br />
  56. [page:Array values] - 与时间数组中的时间点相关的值组成的数组, 被内部转化为
  57. [link:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array Float32Array].<br />
  58. [page:Constant interpolation] - 使用的插值类型。 参见
  59. [page:Animation Animation Constants] for possible values. Default is [page:Animation InterpolateLinear].
  60. </p>
  61. <h2>属性</h2>
  62. <h3>[property:String name]</h3>
  63. <p>
  64. 轨道的名称可以指动画对象中的变形目标([page:Geometry.morphTargets morph targets])、骨骼([page:SkinnedMesh bones])或可能的其他值
  65. 查看[page:PropertyBinding.parseTrackName]可获知哪些形式的字符串可以解析出绑定的属性:
  66. </p>
  67. <p>
  68. 可以使用节点名称或uuid(尽管它需要位于传递到混合器的场景图节点的子树中)引用到某节点。或者, 如果轨道名称的首字符是点,
  69. 该轨道会应用到传入到混合器的根节点上。
  70. </p>
  71. <p>
  72. 通常,在该节点之后会直接指定一个属性。 但是也可以再指定一个子属性, 例如 如果只是想通过浮动轨道使X组件旋转,可使用 .rotation[x]。
  73. </p>
  74. <p>
  75. 还可以使用对象名称来指定骨骼或多材质,例如:.bones[R_hand].scale;再比如,材料数组中的第四个材料的漫反射颜色的红通道可以通过 .materials[3].diffuse[r]访问到。
  76. </p>
  77. <p>
  78. 属性绑定也会解析变形目标名称, 例如: .morphTargetInfluences[run]
  79. </p>
  80. <p>
  81. 说明: 轨道名称不一定得唯一。 多个轨道可驱动统一属性, 此时结果应该基于多个轨道之间根据其各自动作的权重的加权混合。
  82. </p>
  83. <h3>[property:Float32Array times]</h3>
  84. <p>
  85. 一个[link:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array Float32Array]类型的值,由传入构造器中时间数组参数转化而来。
  86. </p>
  87. <h3>[property:Float32Array values]</h3>
  88. <p>
  89. 一个[link:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array Float32Array]类型的值,
  90. 由传入构造器中值数组参数转化而来
  91. </p>
  92. <h3>[property:Constant DefaultInterpolation]</h3>
  93. <p>
  94. 默认的参数插值类型: [page:Animation InterpolateLinear].
  95. </p>
  96. <h3>[property:Constant TimeBufferType ]</h3>
  97. <p>
  98. [link:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array Float32Array],
  99. 内部用于时间数组的缓冲区的类型
  100. </p>
  101. <h3>[property:Constant ValueBufferType ]</h3>
  102. <p>
  103. [link:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array Float32Array],
  104. 内部用于值数组的缓冲区的类型
  105. </p>
  106. <h2>方法</h2>
  107. <h3>[method:KeyframeTrack clone]()</h3>
  108. <p></p>
  109. <h3>[method:null createInterpolant]()</h3>
  110. <p>
  111. 根据传入构造器中的插值类型参数,创建线性插值([page:LinearInterpolant LinearInterpolant]),立方插值([page:CubicInterpolant CubicInterpolant])或离散插值
  112. ([page:DiscreteInterpolant DiscreteInterpolant])
  113. </p>
  114. <h3>[method:null getInterpolation]()</h3>
  115. <p>
  116. 返回插值类型
  117. </p>
  118. <h3>[method:Number getValueSize]()</h3>
  119. <p>
  120. 返回每个值的大小(即[page:.values values]数组的长度除以[page:.times times]数组的长度
  121. </p>
  122. <h3>[method:DiscreteInterpolant InterpolantFactoryMethodDiscrete]( [link:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array result] )</h3>
  123. <p>
  124. 根据时间([page:KeyframeTrack.times times])和值([page:KeyframeTrack.times values])创建一个新的离散插值([page:DiscreteInterpolant DiscreteInterpolant])。
  125. 可传入一个Float32Array类型的变量来接收结果, 否则会自动创建一个长度适宜的新数组。
  126. </p>
  127. <h3>[method:null InterpolantFactoryMethodLinear]( [link:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array result] )</h3>
  128. <p>
  129. 根据时间([page:KeyframeTrack.times times])和值([page:KeyframeTrack.times values])创建一个新的线性插值([page:LinearInterpolant LinearInterpolant])。
  130. 可传入一个Float32Array类型的变量来接收结果, 否则会自动创建一个长度适宜的新数组。
  131. </p>
  132. <h3>[method:null InterpolantFactoryMethodSmooth]( [link:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Float32Array result] )</h3>
  133. <p>
  134. 根据时间([page:KeyframeTrack.times times])和值([page:KeyframeTrack.times values])创建一个新的立方插值([page:CubicInterpolant CubicInterpolant])。
  135. 可传入一个Float32Array类型的变量来接收结果, 否则会自动创建一个长度适宜的新数组。
  136. </p>
  137. <h3>[method:this optimize]()</h3>
  138. <p>
  139. 删除等效的顺序键,这些键在变形目标序列中很常见。
  140. </p>
  141. <h3>[method:this scale]()</h3>
  142. <p>
  143. 缩放所有关键帧的时间。<br /><br />
  144. 说明: 这个方法很有用,例如, 可用于转化为某一特定帧率(正如[page:AnimationClip.CreateFromMorphTargetSequence animationClip.CreateFromMorphTargetSequence]内部所做的一样)。
  145. </p>
  146. <h3>[method:this setInterpolation]( [param:Constant interpolationType] )</h3>
  147. <p>
  148. 设置插值类型。 参阅[page:Animation Animation Constants]以供选择。
  149. </p>
  150. <h3>[method:this shift]( [param:Number timeOffsetInSeconds] )</h3>
  151. <p>
  152. 及时删除之前或之后的所有关键帧。
  153. </p>
  154. <h3>[method:this trim]( [param:Number startTimeInSeconds], [param:Number endTimeInSeconds] )</h3>
  155. <p>
  156. 删除开始时间(startTime)之前以及结束时间(endTime)之后的关键帧,不改变[*startTime*, *endTime*]范围内的任何值。
  157. </p>
  158. <h3>[method:Boolean validate]()</h3>
  159. <p>
  160. 在轨道上执行最小验证,有效则返回true
  161. </p>
  162. <p>
  163. 如果出现以下情况,该方法会在控制台输出错误日志: 轨道为空; [page:.valueSize value size]值不可靠;
  164. [page:.times times]数组或[page:.values values]数组中的元素不是数字;*times*数组中的元素乱序。
  165. </p>
  166. <h2>静态方法</h2>
  167. <h3>[method:KeyframeTrack parse]( [param:JSON json] )</h3>
  168. <p>
  169. 解析JSON对象并返回一个正确类型的新关键帧轨道。
  170. </p>
  171. <h3>[method:JSON toJSON]( [param:KeyframeTrack track] )</h3>
  172. <p>
  173. 将该轨道转化为JSON
  174. </p>
  175. <h2>源码</h2>
  176. [link:https://github.com/mrdoob/three.js/blob/master/src/[path].js src/[path].js]
  177. </body>
  178. </html>