diff --git a/src/core/Geometry.js b/src/core/Geometry.js index d7399633ea02c75589ae04ae0423d7d96e0b52ec..c032baf519edba8b1c6f273ac6fc1ae0a5c2648f 100644 --- a/src/core/Geometry.js +++ b/src/core/Geometry.js @@ -865,13 +865,48 @@ THREE.Geometry.prototype = { sortFacesByMaterialIndex: function () { + // tag faces + + var faces = this.faces; + var length = faces.length; + + for ( var i = 0; i < length; i ++ ) { + + faces[ i ]._id = i; + + } + + // sort faces + function materialIndexSort( a, b ) { return a.materialIndex - b.materialIndex; } - this.faces.sort( materialIndexSort ); + faces.sort( materialIndexSort ); + + // sort uvs + + var uvs1 = this.faceVertexUvs[ 0 ]; + var uvs2 = this.faceVertexUvs[ 1 ]; + + var newUvs1, newUvs2; + + if ( uvs1 && uvs1.length === length ) newUvs1 = []; + if ( uvs2 && uvs2.length === length ) newUvs2 = []; + + for ( var i = 0; i < length; i ++ ) { + + var id = faces[ i ]._id; + + if ( newUvs1 ) newUvs1.push( uvs1[ id ] ); + if ( newUvs2 ) newUvs2.push( uvs2[ id ] ); + + } + + if ( newUvs1 ) this.faceVertexUvs[ 0 ] = newUvs1; + if ( newUvs2 ) this.faceVertexUvs[ 1 ] = newUvs2; },