2012-09-24 59 views
19

Tengo algunos archivos .js exportados de Blender y cargarlos con THREE.JSONLoader();Three.js - cambio material en tiempo de ejecución

mi devolución de llamada:

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

mi carga:

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

mi crear método:

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

Ahora quiero cambiar mi material en tiempo de ejecución usando mi teclado (cambia de color y de opacidad).

¿Cómo puedo hacer eso?

Respuesta

33

Al crear un nuevo material para cada malla, supongo que solo desea cambiar el color de una malla y no de todas en la matriz inArr, y probablemente necesite algún tipo de selección para eso. Pero cambiando el color del material por sí solo es muy fácil:

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 es la malla que desea cambiar. Los códigos clave se pueden encontrar aquí: http://www.cambiaresearch.com/articles/15/javascript-char-codes-key-codes

+1

muchas gracias. Funciona bien ahora lo probé con cubo y esfera algunos días antes y utilicé: 'THREE.SceneUtils.traverseHierarchy (obj, function (geo) {geo.material = new THREE.MeshLambertMaterial ({color: 0x900000});}) ; 'pero ahora solo puedo usar' obj.material = new THREE.MeshLambertMaterial (..); ' – Phipps