Skip to content

Commit 729ac6d

Browse files
authored
Merge pull request #13755 from Mugen87/dev3
ColladaLoader: Added support for polylists with more than four vertices.
2 parents a1ac530 + 2723953 commit 729ac6d

File tree

1 file changed

+46
-19
lines changed

1 file changed

+46
-19
lines changed

examples/js/loaders/ColladaLoader.js

Lines changed: 46 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2172,29 +2172,56 @@ THREE.ColladaLoader.prototype = {
21722172

21732173
var materialKeys = [];
21742174

2175-
var start = 0, count = 0;
2175+
var start = 0;
21762176

21772177
for ( var p = 0; p < primitives.length; p ++ ) {
21782178

21792179
var primitive = primitives[ p ];
21802180
var inputs = primitive.inputs;
2181-
var triangleCount = 1;
21822181

2183-
if ( primitive.vcount && primitive.vcount[ 0 ] === 4 ) {
2182+
// groups
21842183

2185-
triangleCount = 2; // one quad -> two triangles
2184+
var count = 0;
21862185

2187-
}
2186+
switch ( primitive.type ) {
21882187

2189-
// groups
2188+
case 'lines':
2189+
case 'linestrips':
2190+
count = primitive.count * 2;
2191+
break;
21902192

2191-
if ( primitive.type === 'lines' || primitive.type === 'linestrips' ) {
2193+
case 'triangles':
2194+
count = primitive.count * 3;
2195+
break;
21922196

2193-
count = primitive.count * 2;
2197+
case 'polylist':
21942198

2195-
} else {
2199+
for ( var g = 0; g < primitive.count; g ++ ) {
2200+
2201+
var vc = primitive.vcount[ g ];
2202+
2203+
switch ( vc ) {
2204+
2205+
case 3:
2206+
count += 3; // single triangle
2207+
break;
2208+
2209+
case 4:
2210+
count += 6; // quad, subdivided into two triangles
2211+
break;
2212+
2213+
default:
2214+
count += ( vc - 2 ) * 3; // polylist with more than four vertices
2215+
break;
21962216

2197-
count = primitive.count * 3 * triangleCount;
2217+
}
2218+
2219+
}
2220+
2221+
break;
2222+
2223+
default:
2224+
console.warn( 'THREE.ColladaLoader: Unknow primitive type:', primitive.type );
21982225

21992226
}
22002227

@@ -2334,8 +2361,6 @@ THREE.ColladaLoader.prototype = {
23342361

23352362
}
23362363

2337-
var maxcount = 0;
2338-
23392364
var sourceArray = source.array;
23402365
var sourceStride = source.stride;
23412366

@@ -2365,19 +2390,21 @@ THREE.ColladaLoader.prototype = {
23652390

23662391
pushVector( a ); pushVector( b ); pushVector( c );
23672392

2368-
} else {
2393+
} else if ( count > 4 ) {
23692394

2370-
maxcount = Math.max( maxcount, count );
2395+
for ( var k = 1, kl = ( count - 2 ); k <= kl; k ++ ) {
23712396

2372-
}
2397+
var a = index + stride * 0;
2398+
var b = index + stride * k;
2399+
var c = index + stride * ( k + 1 );
23732400

2374-
index += stride * count;
2401+
pushVector( a ); pushVector( b ); pushVector( c );
23752402

2376-
}
2403+
}
23772404

2378-
if ( maxcount > 0 ) {
2405+
}
23792406

2380-
console.log( 'THREE.ColladaLoader: Geometry has faces with more than 4 vertices.' );
2407+
index += stride * count;
23812408

23822409
}
23832410

0 commit comments

Comments
 (0)