diff --git a/src/core/BufferGeometry.js b/src/core/BufferGeometry.js index 04f561d773d693cfe66b3ab7626fe8128bac188a..7cded64f644e0e4b6d60565b92ceb10fe096c622 100644 --- a/src/core/BufferGeometry.js +++ b/src/core/BufferGeometry.js @@ -170,53 +170,43 @@ THREE.BufferGeometry.prototype = { } else if ( object instanceof THREE.Mesh ) { - if ( geometry instanceof THREE.DirectGeometry ) { - - this.fromDirectGeometry( geometry ); - - } else if ( geometry instanceof THREE.Geometry ) { + if ( geometry instanceof THREE.Geometry ) { this.fromGeometry( geometry ); - } + // skinning - // skinning + if ( object instanceof THREE.SkinnedMesh ) { - if ( object instanceof THREE.SkinnedMesh ) { + /* + var skinIndices = new THREE.Float32Attribute( geometry.skinIndices.length * 4, 4 ); + var skinWeights = new THREE.Float32Attribute( geometry.skinWeights.length * 4, 4 ); - /* - var skinIndices = new THREE.Float32Attribute( geometry.skinIndices.length * 4, 4 ); - var skinWeights = new THREE.Float32Attribute( geometry.skinWeights.length * 4, 4 ); + this.addAttribute( 'skinIndex', skinIndices.copyVector4sArray( geometry.skinIndices ) ); + this.addAttribute( 'skinWeight', skinWeights.copyVector4sArray( geometry.skinWeights ) ); + */ - this.addAttribute( 'skinIndex', skinIndices.copyVector4sArray( geometry.skinIndices ) ); - this.addAttribute( 'skinWeight', skinWeights.copyVector4sArray( geometry.skinWeights ) ); - */ - - } - - // morphs + } - if ( object.morphTargetInfluences !== undefined ) { + // morphs - /* - var morphTargets = geometry.morphTargets; + if ( object.morphTargetInfluences !== undefined ) { - if ( morphTargets.length > 0 ) { + var morphTargets = geometry.__directGeometry.morphTargets; for ( var i = 0, l = morphTargets.length; i < l; i ++ ) { var morphTarget = morphTargets[ i ]; - var attribute = new THREE.Float32Attribute( morphTarget.vertices.length * 3, 3 ); + var attribute = new THREE.Float32Attribute( morphTarget.length * 3, 3 ); - this.morphAttributes.push( attribute.copyVector3sArray( morphTarget.vertices ) ); + this.morphAttributes.push( attribute.copyVector3sArray( morphTarget ) ); } - } - */ + // TODO normals, colors - // TODO normals, colors + } } diff --git a/src/core/DirectGeometry.js b/src/core/DirectGeometry.js index df1f7976b7e7c0cd83818ba4dff5ed95bacc19f9..f52a268ebc0ceeaa95442a05e2ec08435bbc98c4 100644 --- a/src/core/DirectGeometry.js +++ b/src/core/DirectGeometry.js @@ -18,6 +18,10 @@ THREE.DirectGeometry = function () { this.uvs = []; this.uvs2 = []; + this.morphTargets = []; + this.morphColors = []; + this.morphNormals = []; + // this.lineDistances = []; this.boundingBox = null; @@ -65,6 +69,37 @@ THREE.DirectGeometry.prototype = { var hasFaceVertexUv = faceVertexUvs[ 0 ] && faceVertexUvs[ 0 ].length > 0; var hasFaceVertexUv2 = faceVertexUvs[ 1 ] && faceVertexUvs[ 1 ].length > 0; + // morphs + + var morphTargets = geometry.morphTargets; + var morphTargetsLength = morphTargets.length; + + for ( var i = 0; i < morphTargetsLength; i ++ ) { + + this.morphTargets[ i ] = []; + + } + + var morphNormals = geometry.morphNormals; + var morphNormalsLength = morphNormals.length; + + for ( var i = 0; i < morphNormalsLength; i ++ ) { + + this.morphNormals[ i ] = []; + + } + + var morphColors = geometry.morphColors; + var morphColorsLength = morphColors.length; + + for ( var i = 0; i < morphColorsLength; i ++ ) { + + this.morphColors[ i ] = []; + + } + + // + for ( var i = 0; i < faces.length; i ++ ) { var face = faces[ i ]; @@ -135,6 +170,32 @@ THREE.DirectGeometry.prototype = { } + // morphs + + for ( var j = 0; j < morphTargetsLength; j ++ ) { + + var morph = morphTargets[ j ].vertices; + + this.morphTargets[ j ].push( morph[ face.a ], morph[ face.b ], morph[ face.c ] ); + + } + + for ( var j = 0; j < morphNormalsLength; j ++ ) { + + var morph = morphNormals[ j ].normals; + + this.morphNormals[ j ].push( morph[ face.a ], morph[ face.b ], morph[ face.c ] ); + + } + + for ( var j = 0; j < morphColorsLength; j ++ ) { + + var morph = morphColors[ j ].colors; + + this.morphColors[ j ].push( morph[ face.a ], morph[ face.b ], morph[ face.c ] ); + + } + } this.verticesNeedUpdate = geometry.verticesNeedUpdate; @@ -145,14 +206,8 @@ THREE.DirectGeometry.prototype = { return this; /* - if ( geometry.morphTargets ) this.morphTargets = geometry.morphTargets.slice( 0 ); - if ( geometry.morphColors ) this.morphColors = geometry.morphColors.slice( 0 ); - if ( geometry.morphNormals ) this.morphNormals = geometry.morphNormals.slice( 0 ); - if ( geometry.skinIndices ) this.skinIndices = geometry.skinIndices.slice( 0 ); if ( geometry.skinWeights ) this.skinWeights = geometry.skinWeights.slice( 0 ); - - return this; */ },