2016-05-30 13 views
0

奇妙なタイトルをまず説明すると、私が取り組んでいる少しのプロジェクトで3Dアバターを作ろうとしていますが、私が腕の色をアバターでは、実際にテクスチャを使って色を変更するのではなく、テクスチャの白い部分(透明ではない)の色を変更しますが、テクスチャ上で透明であれば白で表示されます点灯。着色前three.js色のテクスチャ

enter image description here

着色後:私は使用しています実際のテクスチャは、ここで見つけることができ

enter image description here

http://imgur.com/SlnOxEw

これは私がテクスチャをレンダリングしています方法です:

var AvatarTexture = new THREE.MeshPhongMaterial({ map: THREE.ImageUtils.loadTexture('./images/Shirt/vest.png'), shininess: 80, shading: THREE.SmoothShading, alphaMap: 0x000000}); 

と着色:

object.children[0].material.color.setHex(0xffcc66); 
object.children[2].material.color.setHex(0xffcc66); 
object.children[4].material.color.setHex(0xffcc66); 

オブジェクト自体はUVをブレンダーからエクスポート.objファイルをマッピングされています。これは、テクスチャに透明性がない場合でも発生します。

+0

three.js

material2 = material1.clone(); 

あなたは材料全体の色を変えます。色の混合。しかし、もしあなたが色と白を混ぜると、結果は青い身体以外のものになります。青+黄=緑があります。 – Martin

答えて

0

部品の色を変更する場合は、オブジェクトは重要ではありませんが、材料はvar referenceです。

//your solution as i understand question 

var material1 = new THREE.MeshPhongMaterial(..); 

    var mesh1.material = material1; 
    var mesh2.material = material1; 

material1.color= red; // both meshes change color. 


//solution: 

var mesh1.material = new THREE.MeshPhongMaterial(..); 
var mesh2.material = new THREE.MeshPhongMaterial(..); 

//or 

var material1 = new THREE.MeshPhongMaterial(..); 
var material2 = new THREE.MeshPhongMaterial(..); 

var mesh1.material = material1; 
var mesh2.material = material2; 
+0

これで部品の色がどのように変わるのですか?私はMeshPhongMaterialをインラインで追加しようとしましたが、同じことをやっただけです。 –

+0

私はあなたのモデルがどのように分かれているのかわかりませんが、その部分の意味は何ですか、そうです、それはobject.children [0] .materialよりindex = 0(または等)のオブジェクトの左手の子です。 color.setHex(0xffcc66);は手だけに適用されます。メッシュとは別のリファレンスでマテリアルを切り替えることができます。たとえば、material1.color.setHex(0xffcc66);動作します。 – Martin

+0

問題は、メッシュではなく、テクスチャを着色している​​ことです。私が作る色に関係なく、手は純粋な白のままです。しかし、私はそれに全くテクスチャを持たないと、手は白ではなく、うまく着色されます。 –

1

まず、three.jsに、最終的な色は、成分ごとmaterial.colormaterial.mapの積です。

material.colorを変更すると、最終的なテクスチャの色が薄くなります。

第2に、2つのメッシュが同じマテリアルを共有し、マテリアルカラーを変更すると、両方のメッシュの色が変わります。

これを防ぐには、各メッシュに個別のマテリアルインスタンスが必要です。 r.77

関連する問題