提交 b1f7a8af 编写于 作者: M Mr.doob 提交者: GitHub

Merge pull request #11285 from Mugen87/mesh

Mesh .updateMorphTargets(): Added BufferGeometry support
......@@ -78,6 +78,10 @@
<h3>[property:Integer itemSize]</h3>
<div>The length of vectors that are being stored in the [page:BufferAttribute.array array].</div>
<h3>[property:String name]</h3>
<div>
Optional name for this attribute instance. Default is an empty string.
</div>
<h3>[property:Boolean needsUpdate]</h3>
<div>
......
......@@ -786,6 +786,7 @@ THREE.MMDLoader.prototype.createMesh = function ( model, texturePath, onProgress
var params = { name: m.name };
var attribute = new THREE.Float32BufferAttribute( model.metadata.vertexCount * 3, 3 );
attribute.name = m.name;
for ( var j = 0; j < model.metadata.vertexCount * 3; j++ ) {
......
......@@ -2876,6 +2876,7 @@ THREE.SEA3D.prototype.readMorpher = function ( sea ) {
var node = sea.node[ i ];
attribs.position[ i ] = new THREE.Float32BufferAttribute( node.vertex, 3 );
attribs.position[ i ].name = node.name;
if ( node.normal ) {
......
......@@ -616,19 +616,44 @@ Object.assign( PropertyBinding.prototype, { // prototype, continued
}
if ( ! targetObject.geometry.morphTargets ) {
if ( targetObject.geometry.isBufferGeometry ) {
console.error( ' can not bind to morphTargetInfluences becasuse node does not have a geometry.morphTargets', this );
return;
if ( ! targetObject.geometry.morphAttributes ) {
}
console.error( ' can not bind to morphTargetInfluences becasuse node does not have a geometry.morphAttributes', this );
return;
}
for ( var i = 0; i < this.node.geometry.morphAttributes.position.length; i ++ ) {
for ( var i = 0; i < this.node.geometry.morphTargets.length; i ++ ) {
if ( targetObject.geometry.morphAttributes.position[ i ].name === propertyIndex ) {
propertyIndex = i;
break;
}
}
if ( targetObject.geometry.morphTargets[ i ].name === propertyIndex ) {
propertyIndex = i;
break;
} else {
if ( ! targetObject.geometry.morphTargets ) {
console.error( ' can not bind to morphTargetInfluences becasuse node does not have a geometry.morphTargets', this );
return;
}
for ( var i = 0; i < this.node.geometry.morphTargets.length; i ++ ) {
if ( targetObject.geometry.morphTargets[ i ].name === propertyIndex ) {
propertyIndex = i;
break;
}
}
......
......@@ -17,6 +17,7 @@ function BufferAttribute( array, itemSize, normalized ) {
}
this.uuid = _Math.generateUUID();
this.name = '';
this.array = array;
this.itemSize = itemSize;
......
......@@ -56,17 +56,53 @@ Mesh.prototype = Object.assign( Object.create( Object3D.prototype ), {
updateMorphTargets: function () {
var morphTargets = this.geometry.morphTargets;
var geometry = this.geometry;
var m, ml, name;
if ( morphTargets !== undefined && morphTargets.length > 0 ) {
if ( geometry.isBufferGeometry ) {
this.morphTargetInfluences = [];
this.morphTargetDictionary = {};
var morphAttributes = geometry.morphAttributes;
var keys = Object.keys( morphAttributes );
for ( var m = 0, ml = morphTargets.length; m < ml; m ++ ) {
if ( keys.length > 0 ) {
this.morphTargetInfluences.push( 0 );
this.morphTargetDictionary[ morphTargets[ m ].name ] = m;
var morphAttribute = morphAttributes[ keys[ 0 ] ];
if ( morphAttribute !== undefined ) {
this.morphTargetInfluences = [];
this.morphTargetDictionary = {};
for ( m = 0, ml = morphAttribute.length; m < ml; m ++ ) {
name = morphAttribute[ m ].name || String( m );
this.morphTargetInfluences.push( 0 );
this.morphTargetDictionary[ name ] = m;
}
}
}
} else {
var morphTargets = geometry.morphTargets;
if ( morphTargets !== undefined && morphTargets.length > 0 ) {
this.morphTargetInfluences = [];
this.morphTargetDictionary = {};
for ( m = 0, ml = morphTargets.length; m < ml; m ++ ) {
name = morphTargets[ m ].name || String( m );
this.morphTargetInfluences.push( 0 );
this.morphTargetDictionary[ name ] = m;
}
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册