diff --git a/examples/js/loaders/ColladaLoader.js b/examples/js/loaders/ColladaLoader.js index 97b4cf2ab6e2f12e6522e1138ac4fd37ca52b457..3748720ea4933c604f81c756821537236c479aac 100644 --- a/examples/js/loaders/ColladaLoader.js +++ b/examples/js/loaders/ColladaLoader.js @@ -2172,29 +2172,56 @@ THREE.ColladaLoader.prototype = { var materialKeys = []; - var start = 0, count = 0; + var start = 0; for ( var p = 0; p < primitives.length; p ++ ) { var primitive = primitives[ p ]; var inputs = primitive.inputs; - var triangleCount = 1; - if ( primitive.vcount && primitive.vcount[ 0 ] === 4 ) { + // groups - triangleCount = 2; // one quad -> two triangles + var count = 0; - } + switch ( primitive.type ) { - // groups + case 'lines': + case 'linestrips': + count = primitive.count * 2; + break; - if ( primitive.type === 'lines' || primitive.type === 'linestrips' ) { + case 'triangles': + count = primitive.count * 3; + break; - count = primitive.count * 2; + case 'polylist': - } else { + for ( var g = 0; g < primitive.count; g ++ ) { + + var vc = primitive.vcount[ g ]; + + switch ( vc ) { + + case 3: + count += 3; // single triangle + break; + + case 4: + count += 6; // quad, subdivided into two triangles + break; + + default: + count += ( vc - 2 ) * 3; // polylist with more than four vertices + break; - count = primitive.count * 3 * triangleCount; + } + + } + + break; + + default: + console.warn( 'THREE.ColladaLoader: Unknow primitive type:', primitive.type ); } @@ -2334,8 +2361,6 @@ THREE.ColladaLoader.prototype = { } - var maxcount = 0; - var sourceArray = source.array; var sourceStride = source.stride; @@ -2365,19 +2390,21 @@ THREE.ColladaLoader.prototype = { pushVector( a ); pushVector( b ); pushVector( c ); - } else { + } else if ( count > 4 ) { - maxcount = Math.max( maxcount, count ); + for ( var k = 1, kl = ( count - 2 ); k <= kl; k ++ ) { - } + var a = index + stride * 0; + var b = index + stride * k; + var c = index + stride * ( k + 1 ); - index += stride * count; + pushVector( a ); pushVector( b ); pushVector( c ); - } + } - if ( maxcount > 0 ) { + } - console.log( 'THREE.ColladaLoader: Geometry has faces with more than 4 vertices.' ); + index += stride * count; }