|
@@ -97,7 +97,7 @@ THREE.SkinnedMesh.prototype.normalizeSkinWeights = function () {
|
|
|
|
|
|
if ( this.geometry instanceof THREE.Geometry ) {
|
|
|
|
|
|
- for ( var i = 0; i < this.geometry.skinIndices.length; i ++ ) {
|
|
|
+ for ( var i = 0; i < this.geometry.skinWeights.length; i ++ ) {
|
|
|
|
|
|
var sw = this.geometry.skinWeights[ i ];
|
|
|
|
|
@@ -109,15 +109,40 @@ THREE.SkinnedMesh.prototype.normalizeSkinWeights = function () {
|
|
|
|
|
|
} else {
|
|
|
|
|
|
- sw.set( 1 ); // this will be normalized by the shader anyway
|
|
|
+ // do nothing
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
- } else {
|
|
|
+ } else if ( this.geometry instanceof THREE.BufferGeometry ) {
|
|
|
+
|
|
|
+ var vec = new THREE.Vector4();
|
|
|
+
|
|
|
+ var skinWeight = this.geometry.attributes.skinWeight;
|
|
|
+
|
|
|
+ for ( var i = 0; i < skinWeight.count; i ++ ) {
|
|
|
+
|
|
|
+ vec.x = skinWeight.getX( i );
|
|
|
+ vec.y = skinWeight.getY( i );
|
|
|
+ vec.z = skinWeight.getZ( i );
|
|
|
+ vec.w = skinWeight.getW( i );
|
|
|
+
|
|
|
+ var scale = 1.0 / vec.lengthManhattan();
|
|
|
+
|
|
|
+ if ( scale !== Infinity ) {
|
|
|
|
|
|
- // skinning weights assumed to be normalized for THREE.BufferGeometry
|
|
|
+ vec.multiplyScalar( scale );
|
|
|
+
|
|
|
+ } else {
|
|
|
+
|
|
|
+ // do nothing
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ skinWeight.setXYZ( i, vec.x, vec.y, vec.z, vec.w )
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
}
|
|
|
|