2012-09-24 13 views
19

Ho alcuni file .js esportati da Blender e caricarli con THREE.JSONLoader();Three.js - modifica sostanziale sul runtime

mia callback:

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

mio carico:

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

mia creare metodo:

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++; 
} 

Ora voglio cambiare il mio materiale in runtime usando la mia tastiera (cambia colore e opacità).

Come posso farlo?

risposta

33

Come si crea un nuovo materiale per ciascuna mesh, presumo che si desideri solo cambiare il colore di una mesh e non di tutto nell'array inArr, e probabilmente è necessario selezionare una specie per tale scopo. Ma cambiando il colore da solo il materiale è abbastanza facile:

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 è la rete che si desidera modificare. I codici chiave possono essere trovati qui: http://www.cambiaresearch.com/articles/15/javascript-char-codes-key-codes

+1

grazie mille. Funziona bene ora ho provato con cubo e sfera alcuni giorni prima e ho usato: 'THREE.SceneUtils.traverseHierarchy (obj, function (geo) {geo.material = new THREE.MeshLambertMaterial ({color: 0x900000});}) ; 'ma ora posso usare solo' obj.material = new THREE.MeshLambertMaterial (..); ' – Phipps