2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > Three.js加载FBX模型并解析骨骼动画

Three.js加载FBX模型并解析骨骼动画

时间:2019-07-08 14:11:22

相关推荐

Three.js加载FBX模型并解析骨骼动画

通过Threejs先加载一个.FBX格式的三维模型文件,然后解析该文件中的骨骼动画信息。

FBX

加载器FBXLoader.js

<!-- 引入fbx模型加载库FBXLoader --><script src="/versions/threejsR92/examples/js/loaders/FBXLoader.js"></script><!-- 辅助文件 --><script src="/versions/threejsR92/examples/js/libs/inflate.min.js"></script>

加载fbx模型文件

加载模型文件,加载完成后,如果模型显示位置不符合要求,可以通过Threejs程序进行平移、缩放等操作。

var loader = new THREE.FBXLoader();//创建一个FBX加载器loader.load("SambaDancing.fbx", function(obj) {console.log(obj);//查看加载后返回的模型对象scene.add(obj)// 适当平移fbx模型位置obj.translateY(-80);})

查看FBX模型帧动画数据

stl、obj都是静态模型,不可以包含动画,fbx除了包含几何、材质信息,可以存储骨骼动画等数据。

解析之前可以先在浏览器控制台查看动画相关的数据是如何存储的。可以看到obj.animations属性的数组包含两个剪辑对象AnimationClip,obj.animations[0]对应剪辑对象AnimationClip包含多组关键帧KeyframeTrack数据,obj.animations[1]对应的剪辑对象AnimationClip没有关键帧数据,也就是说没有关键帧动画。具体的开发中,可能提供的模型有很多包含关键帧动画的剪辑对象AnimationClip,可以根据自己的需要解析某个剪辑对象AnimationClip对应的动画。

执行第一个

解析fbx模型骨骼动画

var mixer=null;//声明一个混合器变量var loader = new THREE.FBXLoader();//创建一个FBX加载器loader.load("SambaDancing.fbx", function(obj) {// console.log(obj)scene.add(obj)obj.translateY(-80);// obj作为参数创建一个混合器,解析播放obj及其子对象包含的动画数据mixer = new THREE.AnimationMixer(obj);// 查看动画数据console.log(obj.animations)// obj.animations[0]:获得剪辑对象clipvar AnimationAction=mixer.clipAction(obj.animations[0]);// AnimationAction.timeScale = 1; //默认1,可以调节播放速度// AnimationAction.loop = THREE.LoopOnce; //不循环播放// AnimationAction.clampWhenFinished=true;//暂停在最后一帧播放的状态AnimationAction.play();//播放动画})

需要注意,在渲染函数中需要更新混合器mixer相关的时间,不然动画不会生效

var clock = new THREE.Clock();// 渲染函数function render() {renderer.render(scene, camera); requestAnimationFrame(render);if (mixer !== null) {//clock.getDelta()方法获得两帧的时间间隔// 更新混合器相关的时间mixer.update(clock.getDelta());}}render();

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