2012-06-14 19 views
14

Quiero hacer que las partes de una malla sean invisibles en tiempo de ejecución. ¿Puedo configurar estas partes como invisibles/transparentes, p. cambiando los atributos de las caras individuales? La malla en sí usa solo un material.¿Puedo ocultar las caras de una malla en three.js?


Ejemplar ilustración como el editor entiende esta pregunta: Imagínese una malla (aquí con una geometría de 20 vértices), donde cada quad de cuatro vértices se acumula una Face4. Ahora, algunas partes de la malla deben hacerse invisibles (aquí dos caras son invisibles).

example

+0

Su pregunta no es muy clara. ¿Estás tratando de configurar la visibilidad de las caras como falsas (hacerlas invisibles)? – frank

+0

He editado esta pregunta de una manera que lo estoy entendiendo. Especialmente, porque estoy teniendo esta pregunta también y no quiero crear un duplicado. – Matthias

Respuesta

23

Puede asignar un material diferente para cada cara. Aquí hay un ejemplo donde las caras comparten un material, pero algunas caras son transparentes:

// geometry 
var geometry = new THREE.BoxGeometry(100, 100, 100, 4, 4, 4); 

// materials 
materials = [ 
    new THREE.MeshLambertMaterial({ color: 0xffff00, side: THREE.DoubleSide }), 
    new THREE.MeshBasicMaterial({ transparent: true, opacity: 0 }) 
]; 

// assign material to each face 
for(var i = 0; i < geometry.faces.length; i++) { 
    geometry.faces[ i ].materialIndex = THREE.Math.randInt(0, 1); 
} 
geometry.sortFacesByMaterialIndex(); // optional, to reduce draw calls 

// mesh 
mesh = new THREE.Mesh(geometry, materials); 
scene.add(mesh); 

Actualización del violín que muestra una manera de cambiar un material en tiempo de ejecución: http://jsfiddle.net/e0x88z7w/

EDIT: MeshFaceMaterial ya no se utiliza. Publicación y violín actualizado.

three.js r.87

+0

Pero, ¿cómo puedo cambiar estos materiales faciales en * runtime *? Agregué un oyente de clic al [Fiddle] (http://jsfiddle.net/2FZU7/2/), que debería volver amarillas todas las caras pero * no funciona *. Encontré una [discusión relacionada] (https://github.com/mrdoob/three.js/issues/1303) sobre eso. – Matthias

+0

** Observación: ** Hacer todas las caras amarillas nuevamente está en contra del caso de uso de la pregunta. Yo [cambié el código] (http://jsfiddle.net/2FZU7/3/) para aplicar el material transparente a cada cara con un clic que tampoco funciona, por supuesto. – Matthias

+1

Este violín permite cambios _runtime_. http://jsfiddle.net/2FZU7/4/. Se basa en la "discusión relacionada" a la que hizo referencia. Además, dado que los almacenamientos intermedios deben ser asignados previamente, no puede cambiar a un material más complicado, por lo que en el nuevo violín, ambos materiales son 'Lambert'. – WestLangley