Browse Source

Fix for shared offset values in inputs. The
primitive input array offset can have a shared
value. The loader assumed inputs.length as an
index. Changed the loader to use a max offset
value. An example of shared offsets is the input
semantic TEXTANGENT and TEXBINORMAL sharing offset
values.

John Pywtorak 13 years ago
parent
commit
018025c66e
1 changed files with 5 additions and 3 deletions
  1. 5 3
      src/extras/loaders/ColladaLoader.js

+ 5 - 3
src/extras/loaders/ColladaLoader.js

@@ -2240,12 +2240,14 @@ THREE.ColladaLoader = function () {
 		var i = 0, j, k, p = primitive.p, inputs = primitive.inputs;
 		var input, index, idx32;
 		var source, numParams;
-		var vcIndex = 0, vcount = 3;
+		var vcIndex = 0, vcount = 3, maxOffset = 0;
 		var texture_sets = [];
 
 		for ( j = 0; j < inputs.length; j ++ ) {
 
 			input = inputs[ j ];
+			var offset = input.offset + 1;
+			maxOffset = (maxOffset < offset)? offset : maxOffset;
 
 			switch ( input.semantic ) {
 
@@ -2277,7 +2279,7 @@ THREE.ColladaLoader = function () {
 					input = inputs[ k ];
 					source = sources[ input.source ];
 
-					index = p[ i + ( j * inputs.length ) + input.offset ];
+					index = p[ i + ( j * maxOffset ) + input.offset ];
 					numParams = source.accessor.params.length;
 					idx32 = index * numParams;
 
@@ -2389,7 +2391,7 @@ THREE.ColladaLoader = function () {
 
 			}
 
-			i += inputs.length * vcount;
+			i += maxOffset * vcount;
 
 		}