2016-05-30 12 views
0

Um den seltsamen Titel zuerst zu erklären, versuche ich, einen 3D - Avatar für ein kleines Projekt zu machen, an dem ich arbeite, aber wenn ich versuche, die Farbe des Arms zu ändern Avatar, es ändert nicht wirklich die Farbe mit der Textur darauf, es ändert die Farbe des weißen Teils (nicht transparent) der Textur, aber wo es transparent ist auf der Textur zeigt es weiß mit, wie es scheint, nein Beleuchtung.three.js Farbe des Objekts, nicht Textur

Vor Färbung:

enter image description here

Nach Färbung:

enter image description here

Die tatsächliche Textur Ich kann verwende hier: http://imgur.com/SlnOxEw

Dies ist, wie ich die Textur bin Rendering:

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

und die Färbung:

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

das Objekt selbst ist ein UV abgebildet OBJ aus Blender exportiert. Dies geschieht auch dann, wenn die Textur nicht transparent ist.

+0

Ändern Sie Farbe des gesamten Materials. Mischen von Farbe. Aber wenn Sie Weiß mit Farbe mischen, ist das Resultat ein anderer als ein blauer Körper. Es ist blau + gelb = grün. – Martin

Antwort

0

Wenn Sie die Farbe des Teils ändern möchten, ist es nicht wichtig, ein Objekt, sondern ein Material var Referenz.

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

Also, wie ändert sich die Farbe der Teile? Ich habe versucht, es inline mit dem MeshPhongMaterial hinzuzufügen, aber es hat genau das Gleiche gemacht. –

+0

Ich weiß nicht, wie Ihr Modell getrennt ist, was ist die Bedeutung des Teils, aber ja, wenn es links Kind des Objekts mit Index = 0 (oder etc) ist, als object.children [0] .material. color.setHex (0xffcc66); wird nur auf der Hand angewendet. Sie können Material durch eine andere Referenz als ein Netz wechseln. zum Beispiel material1.color.setHex (0xffcc66); wird auch funktionieren. – Martin

+0

Das Problem ist, dass es die Textur einfärbt, nicht das Netz. Die Hand bleibt reinweiß, unabhängig von der Farbe, die ich daraus mache. Wenn ich jedoch überhaupt keine Textur habe, ist die Hand fein, nicht weiß. –

1

Zuerst in three.js, die endgültige Farbe ist das Produkt aus material.color und material.map, komponentenweise.

Wenn Sie also material.color ändern, wird die endgültige Texturfarbe getönt.

Zweitens, wenn zwei Meshes das gleiche Material teilen und Sie die Materialfarbe ändern, dann werden beide Meshes die Farbe ändern.

Um dies zu verhindern, müssen Sie für jedes Netz eine separate Materialinstanz haben.

material2 = material1.clone(); 

three.js r.77