Browse Source

Merge pull request #19260 from Mugen87/dev45

OBJLoader: Fix parsing of vertex colors.
Mr.doob 5 years ago
parent
commit
a0ebdb2053
2 changed files with 20 additions and 18 deletions
  1. 10 9
      examples/js/loaders/OBJLoader.js
  2. 10 9
      examples/jsm/loaders/OBJLoader.js

+ 10 - 9
examples/js/loaders/OBJLoader.js

@@ -253,9 +253,9 @@ THREE.OBJLoader = ( function () {
 				var src = this.colors;
 				var dst = this.object.geometry.colors;
 
-				dst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );
-				dst.push( src[ b + 0 ], src[ b + 1 ], src[ b + 2 ] );
-				dst.push( src[ c + 0 ], src[ c + 1 ], src[ c + 2 ] );
+				if ( src[ a ] !== undefined ) dst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );
+				if ( src[ b ] !== undefined ) dst.push( src[ b + 0 ], src[ b + 1 ], src[ b + 2 ] );
+				if ( src[ c ] !== undefined ) dst.push( src[ c + 0 ], src[ c + 1 ], src[ c + 2 ] );
 
 			},
 
@@ -288,12 +288,7 @@ THREE.OBJLoader = ( function () {
 				var ic = this.parseVertexIndex( c, vLen );
 
 				this.addVertex( ia, ib, ic );
-
-				if ( this.colors.length > 0 ) {
-
-					this.addColor( ia, ib, ic );
-
-				}
+				this.addColor( ia, ib, ic );
 
 				if ( ua !== undefined && ua !== '' ) {
 
@@ -461,6 +456,12 @@ THREE.OBJLoader = ( function () {
 
 								);
 
+							} else {
+
+								// if no colors are defined, add placeholders so color and vertex indices match
+
+								state.colors.push( undefined, undefined, undefined );
+
 							}
 
 							break;

+ 10 - 9
examples/jsm/loaders/OBJLoader.js

@@ -268,9 +268,9 @@ var OBJLoader = ( function () {
 				var src = this.colors;
 				var dst = this.object.geometry.colors;
 
-				dst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );
-				dst.push( src[ b + 0 ], src[ b + 1 ], src[ b + 2 ] );
-				dst.push( src[ c + 0 ], src[ c + 1 ], src[ c + 2 ] );
+				if ( src[ a ] !== undefined ) dst.push( src[ a + 0 ], src[ a + 1 ], src[ a + 2 ] );
+				if ( src[ b ] !== undefined ) dst.push( src[ b + 0 ], src[ b + 1 ], src[ b + 2 ] );
+				if ( src[ c ] !== undefined ) dst.push( src[ c + 0 ], src[ c + 1 ], src[ c + 2 ] );
 
 			},
 
@@ -303,12 +303,7 @@ var OBJLoader = ( function () {
 				var ic = this.parseVertexIndex( c, vLen );
 
 				this.addVertex( ia, ib, ic );
-
-				if ( this.colors.length > 0 ) {
-
-					this.addColor( ia, ib, ic );
-
-				}
+				this.addColor( ia, ib, ic );
 
 				if ( ua !== undefined && ua !== '' ) {
 
@@ -476,6 +471,12 @@ var OBJLoader = ( function () {
 
 								);
 
+							} else {
+
+								// if no colors are defined, add placeholders so color and vertex indices match
+
+								state.colors.push( undefined, undefined, undefined );
+
 							}
 
 							break;