手册
- 起步
- 进阶
- 构建工具
参考
- 动画
- 动画 / 轨道
- 音频
- 摄像机
- 常量
- 核心
- 核心 / BufferAttributes
- 附件
- 附件 / 核心
- 附件 / 曲线
- 附件 / 物体
- 几何体
- 立方缓冲几何体(BoxGeometry)
- 圆形缓冲几何体(CircleGeometry)
- 圆锥缓冲几何体(ConeGeometry)
- 圆柱缓冲几何体(CylinderGeometry)
- 十二面缓冲几何体(DodecahedronGeometry)
- 边缘几何体(EdgesGeometry)
- 挤压缓冲几何体(ExtrudeGeometry)
- 二十面缓冲几何体(IcosahedronGeometry)
- 车削缓冲几何体(LatheGeometry)
- 八面缓冲几何体(OctahedronGeometry)
- 参数化缓冲几何体(ParametricGeometry)
- 平面缓冲几何体(PlaneGeometry)
- 多面缓冲几何体(PolyhedronGeometry)
- 圆环缓冲几何体(RingGeometry)
- 形状缓冲几何体(ShapeGeometry)
- 球缓冲几何体(SphereGeometry)
- 四面缓冲几何体(TetrahedronGeometry)
- 文本缓冲几何体(TextGeometry)
- 圆环缓冲几何体(TorusGeometry)
- 圆环缓冲扭结几何体(TorusKnotGeometry)
- 管道缓冲几何体(TubeGeometry)
- 网格几何体(WireframeGeometry)
- 辅助对象
- 灯光
- 灯光 / 阴影
- 加载器
- 加载器 / 管理器
- 材质
- 基础线条材质(LineBasicMaterial)
- 虚线材质(LineDashedMaterial)
- 材质(Material)
- 基础网格材质(MeshBasicMaterial)
- 深度网格材质(MeshDepthMaterial)
- MeshDistanceMaterial
- Lambert网格材质(MeshLambertMaterial)
- MeshMatcapMaterial
- 法线网格材质(MeshNormalMaterial)
- Phong网格材质(MeshPhongMaterial)
- 物理网格材质(MeshPhysicalMaterial)
- 标准网格材质(MeshStandardMaterial)
- MeshToonMaterial
- 点材质(PointsMaterial)
- 原始着色器材质(RawShaderMaterial)
- 着色器材质(ShaderMaterial)
- 阴影材质(ShadowMaterial)
- 点精灵材质(SpriteMaterial)
- 数学库
- 数学库 / 插值
- 物体
- 渲染器
- 渲染器 / 着色器
- 渲染器 / WebXR
- 场景
- 纹理贴图
示例
- 动画
- 控制
- 几何体
- 辅助对象
- 灯光
- 加载器
- 物体
- 后期处理
- 导出器
- 数学库
- QuickHull
- 渲染器
- 实用工具
开发者参考
- 差异化支持
- WebGL 渲染器
KeyframeTrack
关键帧轨道(KeyframeTrack)是关键帧(keyframes)的定时序列, 它由时间和相关值的列表组成, 用来让一个对象的某个特定属性动起来。
在使用手册的“下一步”章节中,“动画系统”一文对three.js动画系统中的不同元素作出了概述
和JSON model format的动画层级相反, 关键帧轨道(KeyframeTrack)不会将单帧作为对象存储在“key”数组(一个存有每一帧的时间和值的地方)中。
关键帧轨道(KeyframeTrack)中总是存在两个数组:times数组按顺序存储该轨道的所有关键帧的时间值,而values数组包含动画属性的相应更改值。
值数组中的每一个成员,属于某一特定时间点,不仅可以是一个简单的数字,还可以是(比如)一个向量(如果是位置动画)或者是一个四元数(如果是旋转动画)。 因此,值数组(也是一个平面阵列)的长度可能是时间数组的三四倍。
与不同类型的动画值对应,存在若干关键帧轨道(KeyframeTrack)的子类,继承了它大多数属性和方法:
- BooleanKeyframeTrack
- ColorKeyframeTrack
- NumberKeyframeTrack
- QuaternionKeyframeTrack
- StringKeyframeTrack
- VectorKeyframeTrack
可以在AnimationClipCreator文件中找到用不同类型的关键帧轨道创建动画剪辑(AnimationClips)的示例。
由于显式值仅针对存储在时间数组中的离散时间点指定,因此必须在两个时间点之间进行插值
轨道的名称对于这个轨道与动画节点的特定属性的连接(由PropertyBinding完成)很重要。
构造器
KeyframeTrack( name : String, times : Array, values : Array, interpolation : Constant )
name - 关键帧轨道(KeyframeTrack)的标识符.
times - 关键帧的时间数组, 被内部转化为 Float32Array.
values - 与时间数组中的时间点相关的值组成的数组, 被内部转化为 Float32Array.
interpolation - 使用的插值类型。 参见 Animation Constants for possible values. Default is InterpolateLinear.
属性
.name : String
轨道的名称可以指动画对象中的变形目标(morph targets)、骨骼(bones)或可能的其他值 查看PropertyBinding.parseTrackName可获知哪些形式的字符串可以解析出绑定的属性:
可以使用节点名称或uuid(尽管它需要位于传递到混合器的场景图节点的子树中)引用到某节点。或者, 如果轨道名称的首字符是点, 该轨道会应用到传入到混合器的根节点上。
通常,在该节点之后会直接指定一个属性。 但是也可以再指定一个子属性, 例如 如果只是想通过浮动轨道使X组件旋转,可使用 .rotation[x]。
还可以使用对象名称来指定骨骼或多材质,例如:.bones[R_hand].scale;再比如,材料数组中的第四个材料的漫反射颜色的红通道可以通过 .materials[3].diffuse[r]访问到。
属性绑定也会解析变形目标名称, 例如: .morphTargetInfluences[run]
说明: 轨道名称不一定得唯一。 多个轨道可驱动统一属性, 此时结果应该基于多个轨道之间根据其各自动作的权重的加权混合。
.times : Float32Array
一个Float32Array类型的值,由传入构造器中时间数组参数转化而来。
.values : Float32Array
一个Float32Array类型的值, 由传入构造器中值数组参数转化而来
.DefaultInterpolation : Constant
默认的参数插值类型: InterpolateLinear.
.TimeBufferType : Constant
Float32Array, 内部用于时间数组的缓冲区的类型
.ValueBufferType : Constant
Float32Array, 内部用于值数组的缓冲区的类型
方法
.clone () : KeyframeTrack
.createInterpolant () : null
根据传入构造器中的插值类型参数,创建线性插值(LinearInterpolant),立方插值(CubicInterpolant)或离散插值 (DiscreteInterpolant)
.getInterpolation () : null
返回插值类型
.getValueSize () : Number
返回每个值的大小(即values数组的长度除以times数组的长度
.InterpolantFactoryMethodDiscrete ( result ) : DiscreteInterpolant
根据时间(times)和值(values)创建一个新的离散插值(DiscreteInterpolant)。 可传入一个Float32Array类型的变量来接收结果, 否则会自动创建一个长度适宜的新数组。
.InterpolantFactoryMethodLinear ( result ) : null
根据时间(times)和值(values)创建一个新的线性插值(LinearInterpolant)。 可传入一个Float32Array类型的变量来接收结果, 否则会自动创建一个长度适宜的新数组。
.InterpolantFactoryMethodSmooth ( result ) : null
根据时间(times)和值(values)创建一个新的立方插值(CubicInterpolant)。 可传入一个Float32Array类型的变量来接收结果, 否则会自动创建一个长度适宜的新数组。
.optimize () : this
删除等效的顺序键,这些键在变形目标序列中很常见。
.scale () : this
缩放所有关键帧的时间。
说明: 这个方法很有用,例如, 可用于转化为某一特定帧率(正如animationClip.CreateFromMorphTargetSequence内部所做的一样)。
.setInterpolation ( interpolationType : Constant ) : this
设置插值类型。 参阅Animation Constants以供选择。
.shift ( timeOffsetInSeconds : Number ) : this
及时删除之前或之后的所有关键帧。
.trim ( startTimeInSeconds : Number, endTimeInSeconds : Number ) : this
删除开始时间(startTime)之前以及结束时间(endTime)之后的关键帧,不改变[startTime, endTime]范围内的任何值。
.validate () : Boolean
在轨道上执行最小验证,有效则返回true
如果出现以下情况,该方法会在控制台输出错误日志: 轨道为空; value size值不可靠; times数组或values数组中的元素不是数字;times数组中的元素乱序。
静态方法
.toJSON ( track : KeyframeTrack ) : JSON
将该轨道转化为JSON
源码
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论