|
@@ -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;
|
|
|
|
|
|
- }
|
|
|
+ for ( var g = 0; g < primitive.count; g ++ ) {
|
|
|
|
|
|
- // groups
|
|
|
+ var type = primitive.type;
|
|
|
|
|
|
- if ( primitive.type === 'lines' || primitive.type === 'linestrips' ) {
|
|
|
+ switch ( type ) {
|
|
|
|
|
|
- count = primitive.count * 2;
|
|
|
+ case 'lines':
|
|
|
+ case 'linestrips':
|
|
|
+ count += 2;
|
|
|
+ break;
|
|
|
|
|
|
- } else {
|
|
|
+ case 'triangles':
|
|
|
+ count += 3;
|
|
|
+ break;
|
|
|
+
|
|
|
+ case 'polylist':
|
|
|
+ var vc = primitive.vcount[ g ];
|
|
|
|
|
|
- count = primitive.count * 3 * triangleCount;
|
|
|
+ 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;
|
|
|
+
|
|
|
+ }
|
|
|
+ break;
|
|
|
+
|
|
|
+ default:
|
|
|
+ console.warn( 'THREE.ColladaLoader: Unknow primitive type:', 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;
|
|
|
|
|
|
}
|
|
|
|