2016-05-30 114 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); 

對象本身是映射的obj從攪拌機中導出的紫外線。即使紋理不具有透明度,也會發生這種情況。

+0

你改變整個材料的顏色。混合的顏色。但是如果你將白色和顏色混合在一起,結果就不是藍色的身體。有藍色+黃色=綠色。 – Martin

回答

0

如果你想改變零件的顏色,它不是重要的一個對象,而是一個材質var參考

//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

我不知道你的模型是如何分開的,該部分的含義是什麼,但是,如果它是index = 0(或等)的對象的左手子對象,則比object.children [0] .material的含義。 color.setHex(0xffcc66);只適用於手。您可以通過除網格之外的其他參考切換材質。例如material1.color.setHex(0xffcc66);也會起作用。 – Martin

+0

問題在於它着色紋理,而不是網格。無論我製作的顏色如何,手都保持純白色。但是,如果我根本沒有紋理,那麼手部顏色就很好,而不是白色。 –

1

首先,在three.js所,最終顏色是material.colormaterial.map產品,逐個分量。

所以,如果你改變material.color,最終的紋理顏色將被着色。其次,如果兩個網格共享相同的材質,並且您更改了材質顏色,那麼兩個網格都會改變顏色。

爲了防止出現這種情況,您需要爲每個網格物體創建一個單獨的材質實例。

material2 = material1.clone(); 

three.js所r.77