1000字范文,内容丰富有趣,学习的好帮手!
1000字范文 > three.js动画(Animation)

three.js动画(Animation)

时间:2019-12-10 23:26:05

相关推荐

three.js动画(Animation)

导航

一、three.js的动画解析基本流程

二、各部分功能介绍

三、threejs的动画类型

四、threejs对动画的处理过程

一、three.js的动画解析基本流程

var mesh; //导出外部文件获得// 新建一个AnimationMixer, 并取得AnimationClip实例列表var mixer = new THREE.AnimationMixer( mesh );var clips = mesh.animations;// 在每一帧中更新mixerfunction update () {mixer.update( deltaSeconds );}// 播放一个特定的动画var clip = THREE.AnimationClip.findByName( clips, 'dance' );var action = mixer.clipAction( clip );action.play();// 播放所有动画clips.forEach( function ( clip ) {mixer.clipAction( clip ).play();} );

二、各部分功能介绍

Animation Clips:动画片段

导入的对象中有一个数组为animations,该数组中储存的就是AnimationClip对象。

每个AnimationClip通常保存对象某个活动的数据。

举个例子,假如mesh是一个角色,可能有一个AnimationClip实现步行循环, 第二个AnimationClip实现跳跃,第三个AnimationClip实现闪避等等。Keyframe Tracks:关键帧轨道

每一个AnimationClip里面,所有的动作轨迹都储存在一个tracks数组中,tracks数组中每个动画的数据都是一个单独的KeyframeTrack。Animation Mixer:动画混合器

存储的数据仅构成动画的基础 —— 实际播放由AnimationMixer控制。

主要方法为:

mixer = new THREE.AnimationMixer(mesh);//通过mesh获取到AnimationMixer对象 action =

mixer.clipAction(clip);//用clipAction方法生成可以控制执行动画的实例Animation Actions:动画行为

通过AnimationMixer生成AnimationAction实例,再通过配置AnimationAction,您可以决定何时播放、暂停或停止其中一个混合器中的某个AnimationClip,还有是否需要重复播放以及重复的频率,是否需要使用淡入淡出或时间缩放,以及一些其他内容,具体参考其api文档。Animation Object Groups:动画对象组

将AnimationClip对象加入组中,并将这个组对象作为根对象传递。

三、threejs的动画类型

主要种类有Morph(变形)动画,关节动画和骨骼蒙皮动画(SkinnedMesh)。

从动画数据的角度来说,三者一般都采用关键帧技术,即只给出关键帧的数据,其他帧的数据使用插值得到。但由于这三种技术的不同,关键帧的数据是不一样的。

Morph(渐变,变形)动画是直接指定动画每一帧的顶点位置,其动画关键中存储的是Mesh所有顶点在关键帧对应时刻的位置。关节动画的模型不是一个整体的Mesh,而是分成很多部分(Mesh),通过一个父子层次结构将这些分散的Mesh组织在一起,父Mesh带动其下子Mesh的运动,各Mesh中的顶点坐标定义在自己的坐标系中,这样各个Mesh是作为一个整体参与运动的。动画帧中设置各子Mesh相对于其父Mesh的变换(主要是旋转,当然也可包括移动和缩放),通过子到父,一级级的变换累加(当然从技术上,如果是矩阵操作是累乘)得到该Mesh在整个动画模型所在的坐标空间中的变换(从本文的视角来说就是世界坐标系了,下同),从而确定每个Mesh在世界坐标系中的位置和方向,然后以Mesh为单位渲染即可。关节动画的问题是,各部分Mesh中的顶点是固定在其Mesh坐标系中的,这样在两个Mesh结合处就可能产生裂缝。骨骼蒙皮动画SkinnedMesh,骨骼蒙皮动画的出现解决了关节动画的裂缝问题,骨骼动画的基本原理可概括为:在骨骼控制下,通过顶点混合动态计算蒙皮网格的顶点,而骨骼的运动相对于其父骨骼,并由动画关键帧数据驱动。一个骨骼动画通常包括骨骼层次结构数据,网格(Mesh)数据,网格蒙皮数据(skin

info)和骨骼的动画(关键帧)数据。

四、Threejs对动画的处理过程

变形动画:导入geometry,geometry中包含morphTargets数据,threejs动画编辑器可以根据此数据编辑出动画片段。

THREE.AnimationClip.CreateFromMorphTargetSequence('run',geometry.morphTargets, 30);

骨骼蒙皮动画:导入一个包含animations数据的对象,根据此数据即可创建出动画片段。

THREE.AnimationClip.findByName( clips, 'dance' );

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。