Browse Source

Geometry: Sort uvs in sortFacesByMaterialIndex. See #7211.

Mr.doob 9 years ago
parent
commit
2b558ff8a1
1 changed files with 36 additions and 1 deletions
  1. 36 1
      src/core/Geometry.js

+ 36 - 1
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;
 
 	},