未验证 提交 7946bd5d 编写于 作者: M Mr.doob 提交者: GitHub

Merge pull request #14494 from donmccurdy/feat-animationutils-clone

SkeletonUtils: Add clone() helper for skinned meshes.
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<base href="../../" />
<script src="list.js"></script>
<script src="page.js"></script>
<link type="text/css" rel="stylesheet" href="page.css" />
</head>
<body>
<h1>[name]</h1>
<p class="desc">Utility functions for [page:Skeleton], [page:SkinnedMesh], and [page:Bone] manipulation.</p>
<h2>Methods</h2>
<h3>[method:Object3D clone]( [param:Object3D object] )</h3>
<p>
Clones the given object and its descendants, ensuring that any [page:SkinnedMesh] instances
are correctly associated with their bones. Bones are also cloned, and must be descendants of
the object passed to this method. Other data, like geometries and materials, are reused by
reference.
</p>
<h3>[method:Object findBoneTrackData]( [param:String name], [param:Array tracks] )</h3>
<p></p>
<h3>[method:Bone getBoneByName]( [param:String name], [param:Skeleton skeleton] )</h3>
<p></p>
<h3>[method:Array getBones]( [param:Skeleton skeleton] )</h3>
<p></p>
<h3>[method:Array getEqualsBonesNames]( [param:Skeleton skeleton], [param:Skeleton targetSkeleton] )</h3>
<p></p>
<h3>[method:SkeletonHelper getHelperFromSkeleton]( [param:Skeleton skeleton] )</h3>
<p></p>
<h3>[method:Bone getNearestBone]( [param:Bone bone], [param:Array names] )</h3>
<p></p>
<h3>[method:Object getSkeletonOffsets]( [param:SkeletonHelper target], [param:SkeletonHelper source], [param:Object options] )</h3>
<p></p>
<h3>[method:this renameBones]( [param:Skeleton skeleton], [param:Array names] )</h3>
<p></p>
<h3>[method:null retarget]( [param:SkeletonHelper target], [param:SkeletonHelper source], [param:Object options] )</h3>
<p></p>
<h3>[method:AnimationClip retargetClip]( [param:SkeletonHelper target], [param:SkeletonHelper source], [param:AnimationClip clip], [param:Object options] )</h3>
<p></p>
<h2>Source</h2>
[link:https://github.com/mrdoob/three.js/blob/master/examples/js/utils/SkeletonUtils.js examples/js/utils/SkeletonUtils.js]
</body>
</html>
......@@ -408,7 +408,8 @@ var list = {
"Utils": {
"BufferGeometryUtils": "examples/utils/BufferGeometryUtils",
"SceneUtils": "examples/utils/SceneUtils"
"SceneUtils": "examples/utils/SceneUtils",
"SkeletonUtils": "examples/utils/SkeletonUtils"
}
},
......
......@@ -528,6 +528,58 @@ THREE.SkeletonUtils = {
return bones;
},
clone: function ( source ) {
var sourceLookup = new Map();
var cloneLookup = new Map();
var clone = source.clone();
parallelTraverse( source, clone, function ( sourceNode, clonedNode ) {
sourceLookup.set( clonedNode, sourceNode );
cloneLookup.set( sourceNode, clonedNode );
} );
clone.traverse( function ( node ) {
if ( ! node.isSkinnedMesh ) return;
var clonedMesh = node;
var sourceMesh = sourceLookup.get( node );
var 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 clone;
}
};
function parallelTraverse ( a, b, callback ) {
callback( a, b );
for ( var i = 0; i < a.children.length; i ++ ) {
parallelTraverse( a.children[ i ], b.children[ i ], callback );
}
}
......@@ -162,5 +162,4 @@ var AnimationUtils = {
};
export { AnimationUtils };
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册