From c6b1bd8c346b2dcc3524e1c35a91562b3b1b2d0c Mon Sep 17 00:00:00 2001 From: Jeff Terrace Date: Sat, 19 Nov 2011 21:32:43 -0500 Subject: [PATCH] Fix collada loader to load faces with multiple materials properly, setting materialIndex --- src/extras/loaders/ColladaLoader.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/src/extras/loaders/ColladaLoader.js b/src/extras/loaders/ColladaLoader.js index 18b1d98a..1aa5f222 100644 --- a/src/extras/loaders/ColladaLoader.js +++ b/src/extras/loaders/ColladaLoader.js @@ -594,6 +594,7 @@ THREE.ColladaLoader = function () { var instance_materials = instance_geometry.instance_material; var geometry = geometries[instance_geometry.url]; var used_materials = {}; + var used_materials_array = []; var num_materials = 0; var first_material; @@ -619,7 +620,8 @@ THREE.ColladaLoader = function () { var shader = effects[effect_id].shader; shader.material.opacity = !shader.material.opacity ? 1 : shader.material.opacity; - used_materials[inst_material.symbol] = shader.material; + used_materials[inst_material.symbol] = num_materials; + used_materials_array.push(shader.material) first_material = shader.material; num_materials ++; @@ -634,11 +636,12 @@ THREE.ColladaLoader = function () { if ( num_materials > 1 ) { material = new THREE.MeshFaceMaterial(); - + geom.materials = used_materials_array; + for ( j = 0; j < geom.faces.length; j ++ ) { var face = geom.faces[ j ]; - face.materials = [ used_materials[ face.daeMaterial ] ]; + face.materialIndex = used_materials[ face.daeMaterial ] }