|
@@ -38,41 +38,60 @@
|
|
<h2>Example</h2>
|
|
<h2>Example</h2>
|
|
|
|
|
|
<code>
|
|
<code>
|
|
- var geometry = new THREE.CylinderGeometry( 5, 5, 5, 5, 15, 5, 30 );
|
|
|
|
|
|
+ var geometry = new THREE.CylinderBufferGeometry( 5, 5, 5, 5, 15, 5, 30 );
|
|
|
|
|
|
- //Create the skin indices and skin weights
|
|
|
|
- for ( var i = 0; i < geometry.vertices.length; i ++ ) {
|
|
|
|
|
|
+ // create the skin indices and skin weights
|
|
|
|
|
|
- // Imaginary functions to calculate the indices and weights
|
|
|
|
- // This part will need to be changed depending your skeleton and model
|
|
|
|
- var skinIndex = calculateSkinIndex( geometry.vertices, i );
|
|
|
|
- var skinWeight = calculateSkinWeight( geometry.vertices, i );
|
|
|
|
|
|
+ var position = geometry.attributes.position;
|
|
|
|
|
|
- // Ease between each bone
|
|
|
|
- geometry.skinIndices.push( new THREE.Vector4( skinIndex, skinIndex + 1, 0, 0 ) );
|
|
|
|
- geometry.skinWeights.push( new THREE.Vector4( 1 - skinWeight, skinWeight, 0, 0 ) );
|
|
|
|
|
|
+ var vertex = new THREE.Vector3();
|
|
|
|
+
|
|
|
|
+ var skinIndices = [];
|
|
|
|
+ var skinWeights = [];
|
|
|
|
+
|
|
|
|
+ for ( var i = 0; i < position.count; i ++ ) {
|
|
|
|
+
|
|
|
|
+ vertex.fromBufferAttribute( position, i );
|
|
|
|
+
|
|
|
|
+ // compute skinIndex and skinWeight based on some configuration data
|
|
|
|
+
|
|
|
|
+ var y = ( vertex.y + sizing.halfHeight );
|
|
|
|
+
|
|
|
|
+ var skinIndex = Math.floor( y / sizing.segmentHeight );
|
|
|
|
+ var skinWeight = ( y % sizing.segmentHeight ) / sizing.segmentHeight;
|
|
|
|
+
|
|
|
|
+ skinIndices.push( skinIndex, skinIndex + 1, 0, 0 );
|
|
|
|
+ skinWeights.push( 1 - skinWeight, skinWeight, 0, 0 );
|
|
|
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ geometry.addAttribute( 'skinIndex', new THREE.Uint16BufferAttribute( skinIndices, 4 ) );
|
|
|
|
+ geometry.addAttribute( 'skinWeight', new THREE.Float32BufferAttribute( skinWeights, 4 ) );
|
|
|
|
+
|
|
|
|
+ // create skinned mesh and skeleton
|
|
|
|
+
|
|
var mesh = new THREE.SkinnedMesh( geometry, material );
|
|
var mesh = new THREE.SkinnedMesh( geometry, material );
|
|
|
|
+ var skeleton = new THREE.Skeleton( bones );
|
|
|
|
+
|
|
|
|
+ // see example from THREE.Skeleton
|
|
|
|
|
|
- // See example from THREE.Skeleton for the armSkeleton
|
|
|
|
- var rootBone = armSkeleton.bones[ 0 ];
|
|
|
|
|
|
+ var rootBone = skeleton.bones[ 0 ];
|
|
mesh.add( rootBone );
|
|
mesh.add( rootBone );
|
|
|
|
|
|
- // Bind the skeleton to the mesh
|
|
|
|
- mesh.bind( armSkeleton );
|
|
|
|
|
|
+ // bind the skeleton to the mesh
|
|
|
|
|
|
- // Move the bones and manipulate the model
|
|
|
|
- armSkeleton.bones[ 0 ].rotation.x = -0.1;
|
|
|
|
- armSkeleton.bones[ 1 ].rotation.x = 0.2;
|
|
|
|
|
|
+ mesh.bind( skeleton );
|
|
|
|
+
|
|
|
|
+ // move the bones and manipulate the model
|
|
|
|
+
|
|
|
|
+ skeleton.bones[ 0 ].rotation.x = -0.1;
|
|
|
|
+ skeleton.bones[ 1 ].rotation.x = 0.2;
|
|
</code>
|
|
</code>
|
|
|
|
|
|
<h2>Constructor</h2>
|
|
<h2>Constructor</h2>
|
|
- <h3>[name]( [param:Geometry geometry], [param:Material material] )</h3>
|
|
|
|
|
|
+ <h3>[name]( [param:BufferGeometry geometry], [param:Material material] )</h3>
|
|
<p>
|
|
<p>
|
|
- [page:Geometry geometry] - an instance of [page:Geometry] or [page:BufferGeometry] (recommended).
|
|
|
|
- [page:Geometry.skinIndices skinIndices] and [page:Geometry.skinWeights skinWeights] should be set to true on the geometry.<br />
|
|
|
|
|
|
+ [page:Geometry geometry] - an instance of [page:BufferGeometry].<br />
|
|
[page:Material material] - (optional) an instance of [page:Material]. Default is a new [page:MeshBasicMaterial].
|
|
[page:Material material] - (optional) an instance of [page:Material]. Default is a new [page:MeshBasicMaterial].
|
|
</p>
|
|
</p>
|
|
|
|
|
|
@@ -109,8 +128,7 @@
|
|
|
|
|
|
<h3>[property:Skeleton skeleton]</h3>
|
|
<h3>[property:Skeleton skeleton]</h3>
|
|
<p>
|
|
<p>
|
|
- [page:Skeleton] created from the [page:Geometry.bones bones] of the [page:Geometry] passed in the
|
|
|
|
- constructor.
|
|
|
|
|
|
+ [page:Skeleton] representing the bone hierachy of the skinned mesh.
|
|
</p>
|
|
</p>
|
|
|
|
|
|
|
|
|
|
@@ -136,7 +154,7 @@
|
|
|
|
|
|
<h3>[method:null normalizeSkinWeights]()</h3>
|
|
<h3>[method:null normalizeSkinWeights]()</h3>
|
|
<p>
|
|
<p>
|
|
- Normalizes the [page:Geometry.skinWeights] vectors. Does not affect [page:BufferGeometry].
|
|
|
|
|
|
+ Normalizes the skin weights.
|
|
</p>
|
|
</p>
|
|
|
|
|
|
<h3>[method:null pose]()</h3>
|
|
<h3>[method:null pose]()</h3>
|