cione-comp-lib
Version:
`$ yarn add cione-comp-lib` 或者 `$ npm i cione-comp-lib -S`
31 lines (30 loc) • 1.03 kB
JavaScript
function clone(source) {
const sourceLookup = /* @__PURE__ */ new Map();
const cloneLookup = /* @__PURE__ */ new Map();
const clone2 = source.clone();
parallelTraverse(source, clone2, function(sourceNode, clonedNode) {
sourceLookup.set(clonedNode, sourceNode);
cloneLookup.set(sourceNode, clonedNode);
});
clone2.traverse(function(node) {
if (!node.isSkinnedMesh)
return;
const clonedMesh = node;
const sourceMesh = sourceLookup.get(node);
const sourceBones = sourceMesh.skeleton.bones;
clonedMesh.skeleton = sourceMesh.skeleton.clone();
clonedMesh.bindMatrix.copy(sourceMesh.bindMatrix);
clonedMesh.skeleton.bones = sourceBones.map(function(bone) {
return cloneLookup.get(bone);
});
clonedMesh.bind(clonedMesh.skeleton, clonedMesh.bindMatrix);
});
return clone2;
}
function parallelTraverse(a, b, callback) {
callback(a, b);
for (let i = 0; i < a.children.length; i++) {
parallelTraverse(a.children[i], b.children[i], callback);
}
}
export { clone };