2012-09-24 4 views
19

ich einige Js Dateien aus Blender exportiert haben und laden sie mit THREE.JSONLoader();Three.js - Change Material auf Runtime

mein Rückruf:

var callback = function(geometry) { createMesh(geometry); 

mein Laden:

loader.load("Models/sculp.js", callback); 

mein Methode erstellen:

function createMesh(geometry){ 

    inArr[id] = new THREE.Mesh(geometry, new THREE.MeshLambertMaterial({ color: 0xbbbbbb})); 
    inArr[id].scale.set(100, 100, 100); 
    scene.add(inArr[id]); 
    id++; 
} 

Jetzt möchte ich mein Material zur Laufzeit ändern, indem ich meine Tastatur verwende (ändert Farbe und Deckkraft).

Wie kann ich das tun?

Antwort

33

Wenn Sie ein neues Material für jedes Mesh erstellen, nehme ich an, dass Sie nur die Farbe eines Meshes ändern möchten und nicht alle im Array inArr, und Sie brauchen wahrscheinlich eine Auswahl dafür. Aber das Ändern der Farbe des Materials allein ist ganz einfach:

var onKeyDown = function(event) { 
    if (event.keyCode == 67) { // when 'c' is pressed 
    object.material.color.setHex(0xff0000); // there is also setHSV and setRGB 
    } 
}; 
document.addEventListener('keydown', onKeyDown, false); 

object ist das Netz das Sie ändern möchten. Schlüsselcodes finden Sie hier: http://www.cambiaresearch.com/articles/15/javascript-char-codes-key-codes

+1

vielen Dank. Es funktioniert gut, jetzt habe ich es mit Würfel und Kugel einige Tage zuvor versucht und ich verwendet: 'THREE.SceneUtils.traverseHierarchy (obj, Funktion (geo) {geo.material = neu THREE.MeshLambertMaterial ({color: 0x900000});}) ; 'aber jetzt kann ich nur' obj.material = new THREE.MeshLambertMaterial (..); 'verwenden – Phipps