|
@@ -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;
|
|
|
|
|
|
},
|
|
|
|