2016-08-02 7 views
0

はここに私の問題だ:私はThree.jsでOBJメッシュの子供に特定の材料を適用したいはメッシュTHREE.OBJの特定の子にマテリアルを適用

しかし材料は子供のものではなく親のメッシュに適用されているようです...私はさまざまなことを試みましたが、最後に適用された材料が親に設定されるたびに...間違っていますか?たぶん私は正しい方法、アイデアを使用しないでしょうか?

/* material */ 

material = new THREE.MeshLambertMaterial({ 
    color: 0x9B9B9B, 
    emissive: 0x050505, 
    emissiveIntensity: 0.1 
}); 

firstChildMaterial = new THREE.MeshLambertMaterial({ 
    color: 0x9693057, 
    emissive: 0x050505, 
    emissiveIntensity: 0.1 
}); 

/* Model */ 

loader = function (url) { 
    scene.remove(object); 
    var objLoader = new THREE.OBJLoader(); 
    objLoader.load(url, function (obj) { 

     object = obj; 

     object.traverse(function (child) { 
      if (child instanceof THREE.Mesh) { 
       child.material = material; 
       // How can I apply firstChildMaterial to the first child ?… 
      } 
     }); 
     scene.add(object); 
    }); 
}; 

最終メッシュのスクリーンショットは、子供

Screenshot of the console

であるが助けてくれてありがとう! :-)

答えて

0

あなただけのオブジェクトの名前のためにテストすることができます。

object.traverse(function(obj) { 
    if (obj.name && obj.name.includes('mesh 1')) { 
    obj.material = firstChildMaterial; 
    } 
}); 
+0

おかげで多くのことを、私は今、これをしようとします! :-D –

+0

それは完璧に動作します!どうもありがとうございました ! –

+0

'String.includes'メソッドはかなり新しく、すべてのブラウザで利用できるとは限りません。 '(obj.name.indexOf( 'mesh 1')!== -1)'はおそらく読みにくいが、よりよくサポートされている。 –

関連する問題