当前位置: 首页 > article >正文

three.js KeyframeTrack

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)之后的关键帧,不改变[startTimeendTime]范围内的任何值。

.validate () : Boolean

在轨道上执行最小验证,有效则返回true

如果出现以下情况,该方法会在控制台输出错误日志: 轨道为空; value size值不可靠; times数组或values数组中的元素不是数字;times数组中的元素乱序。

静态方法

.toJSON ( track : KeyframeTrack ) : JSON

将该轨道转化为JSON


http://www.kler.cn/news/306329.html

相关文章:

  • SpringMVC 入门案例详解
  • 免费像素画绘制软件 | Pixelorama v1.0.3
  • ArrayList动态数组
  • react18基础教程系列--安装环境及packagejson文件分析
  • llama网络结构及源码
  • 【MySQL学习】基础指令全解:构建你的数据库技能
  • OPENAIGC开发者大赛高校组金奖 | 基于混合大语言模型与多模态的全过程通用AI Agent
  • 【搜索算法】以扩召回为目标,item-tag不如query-tag能扩更多数量
  • 软件设计师——程序设计语言
  • 【短距离通信】【WiFi】精讲Android WiFi P2P架构及代码示例
  • SpringBoot教程(安装篇) | RabbitMQ的安装
  • MySQl篇(数据类型)(持续更新迭代)
  • 面试常见题之Spring Cloud
  • Redis常见应用场景
  • fsck 命令:修复文件系统错误
  • 读构建可扩展分布式系统:方法与实践05分布式缓存
  • 2-3.Android 存储之存储空间(私有空间、公共空间)
  • 【Android】Room—数据库的基本操作
  • 第108集《大佛顶首楞严经》
  • CAD_Electrical 2022使用记录
  • [Python学习日记-23] Python v2 和 v3 中的字符编码
  • python定时任务,定时爬取水质和天气
  • Navicat On-Prem Server 2.0 | MySQL与MariaDB基础管理功能正式上云
  • Windows电脑A远程连接电脑B
  • Java面试篇基础部分-Java反射机制是什么
  • 镜舟科技与中启乘数科技达成战略合作,共筑数据服务新生态
  • Lua闭包
  • 基于yolov5的混凝土缺陷检测系统python源码+onnx模型+评估指标曲线+精美GUI界面
  • 【Linux C | 终端设备】Linux下 tty、ttyS*、ttyAMA*、console 的区别,以及系统输出重定向(附带代码)
  • NPM私库搭建-verdaccio(Linux)