2016-06-09 4 views
1

Ich versuche, (durch Klicken auf separaten Würfel) Onclick Texturen/Farben eines Objekts zu ändernnicht in der Lage ändern Texturen auf Klick threejs

Ich bin in der Lage nur einmal die Farbe eines Objekts zu ändern (obwohl ich Verwenden Sie eine For-Schleife und vorausgesetzt, dass keine vorherigen Texturen oder Farben auf dem Objekt vorhanden sind. Allerdings kann ich die Farbe nicht ändern, wenn das Objekt bereits eine vorhandene Farbe hat. Muss ich einige NeedsUpdate hinzufügen? Ich habe aber kein Glück gehabt .. bitte schau dir meine onclick Funktion an.

EventsControls.attachEvent('onclick', function() { 
    var colors = ['White', 'blue', 'gold']; 
    for (var i = 0; i < colors.length; i++) { 
     object.traverse(function(child) { 
      if (child instanceof THREE.Mesh) { 
       if (child.material.name == "Sofa_Leather") { 
        child.material = colors[i]; // array elements are already defined 
        child.material.needsUpdate = true; 
        child.material.buffersNeedUpdate = true; 
        child.material.uvsNeedUpdate = true; 
        child.receiveShadow = true; 
       } 
      } 
     }) 
    } 
}); 

Bitte lassen Sie mich wissen, wo es falsch geht. Vielen Dank.

// Erneut versucht, könnte aber nur eine Farbe mit dem untenstehenden Code ändern, ich denke, dass ich das needsUpdate falsch verwende.

    var index=0;  
        var colors=[0xfffeef,0xffff00,0x000fff]; 

        object.traverse(function(child) { if (child instanceof THREE.Mesh) { 

        if (child.material.name == "Sofa_Leather") { 

           if(index == colors.length) index = 0; 
           child.material.color.setHex(colors[index++]); 

           child.material.needsUpdate = true; 
           child.receiveShadow = true; 
          } } 
        }) 
+0

Material ist nicht gleich einer Farbe? Haben Sie 'material.color' versucht, aber es sollte im richtigen Farbformat wie' 0xff0000' sein. –

+0

var Weiß = new THREE.MeshPhongMaterial ({ \t Farbe: 0xffffef, \t kombinieren: THREE.MultiplyOperation, \t Reflektivität: 0,4 }) ich habe Farben global wie folgt definiert, habe ich versucht, mit material.color = Farben [ i], aber Objekt verschwindet, wenn onclicked –

+0

Sie scheinen Farbe zu einer Zeichenkette zu setzen, versuchen Sie, die Methode zu verwenden: .setHex (0xff0000); Siehe dieses Beispiel - http://jsfiddle.net/Lfr5my2s/11/ – Neil

Antwort

1

Ich glaube, Sie können dies tun, indem Sie:

material.color.setHex(0xffffff * Math.random()); // set to random color 

EDIT:

Nun ja sicher, dass Sie dies auch tun können:

var colors = [0xff0000, 0x00ff00, 0x0000ff]; // red, green and blue 
if(index == colors.length) index = 0; 
line.material.color.setHex(colors[index++]); 

dieses ansehen aktualisiert jsfiddle

+0

Neil, ich bin in der Lage, dies zu tun, aber meine Anforderung ist, ich brauche ausgewählte Farben/Texturen in einem Array gespeichert, so dass ich sie onclick entsprechend verwenden kann. –

+0

@andyram Ich sehe kein Problem, siehe aktualisierte Antwort und Geige – Neil

+0

Ich versuchte es mit der Geige Referenz, konnte ich erste Array-Farbe, aber nicht alle, ist es ein needsupdate Problem hier? Ich habe den obigen Code aktualisiert. –