three.js 骨骼动画的clone

const cloneGltf = (gltf) => {
     const clone = {
       animations: gltf.animations,
       scene: gltf.scene.clone(true)
     };
   
     const skinnedMeshes = {};
   
     gltf.scene.traverse(node => {
       if (node.isSkinnedMesh) {
         skinnedMeshes[node.name] = node;
       }
     });
   
     const cloneBones = {};
     const cloneSkinnedMeshes = {};
   
     clone.scene.traverse(node => {
       if (node.isBone) {
         cloneBones[node.name] = node;
       }
   
       if (node.isSkinnedMesh) {
         cloneSkinnedMeshes[node.name] = node;
       }
     });
   
     for (let name in skinnedMeshes) {
       const skinnedMesh = skinnedMeshes[name];
       const skeleton = skinnedMesh.skeleton;
       const cloneSkinnedMesh = cloneSkinnedMeshes[name];
   
       const orderedCloneBones = [];
   
       for (let i = 0; i < skeleton.bones.length; ++i) {
         const cloneBone = cloneBones[skeleton.bones[i].name];
         orderedCloneBones.push(cloneBone);
       }
   
       cloneSkinnedMesh.bind(
           new THREE.Skeleton(orderedCloneBones, skeleton.boneInverses),
           cloneSkinnedMesh.matrixWorld);
     }
   
     return clone;
   }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值