2012-06-14 10 views
14

Ich möchte Teile eines Mesh zur Laufzeit unsichtbar machen. Kann ich diese Teile unsichtbar/transparent einstellen, z. durch Ändern der Attribute einzelner Gesichter? Das Mesh selbst verwendet nur ein Material.Kann ich Gesichter eines Gitters in three.js ausblenden?


Exemplarische Abbildung als Editor versteht diese Frage: Stellen Sie sich ein Gitter (hier mit einer Geometrie von 20 Knoten), wobei jedes Quadrat von vier Scheitelpunkten aufbaut ein Face4. Nun sollten einige Teile des Gitters unsichtbar gemacht werden (hier sind zwei Gesichter unsichtbar).

example

+0

Ihre Frage ist nicht wirklich klar. Versuchen Sie, die Sichtbarkeit von Gesichtern als falsch zu definieren (unsichtbar zu machen)? – frank

+0

Ich habe diese Frage so bearbeitet, dass ich sie verstehe. Vor allem, weil ich diese Frage auch habe und nicht ein Duplikat erstellen möchte. – Matthias

Antwort

23

Sie können ein anderes Material zu jedem Gesicht zuordnen. Hier ist ein Beispiel, wo die Gesichter ein Material teilen, aber einige Gesichter sind transparent:

// 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); 

Aktualisiert Fiddle zeigt eine Möglichkeit, ein Material zur Laufzeit zu ändern: http://jsfiddle.net/e0x88z7w/

EDIT: MeshFaceMaterial ist veraltet. Post und Geige aktualisiert.

three.js r.87

+0

Aber wie ändere ich diese Oberflächenmaterialien bei * Laufzeit *? Ich habe dem [Fiddle] (http://jsfiddle.net/2FZU7/2/) einen Klick-Listener hinzugefügt, der alle Gesichter wieder gelb erscheinen lassen sollte, aber es * funktioniert nicht *. Ich habe eine [verwandte Diskussion] (https://github.com/mrdoob/three.js/issues/1303) dazu gefunden. – Matthias

+0

** Bemerkung: ** Alle Gesichter wieder gelb zu machen ist gegen den Anwendungsfall der Frage. Ich [änderte den Code] (http://jsfiddle.net/2FZU7/3/), um das transparente Material auf jedes Gesicht auf dem Klick anzuwenden, was natürlich auch nicht funktioniert. – Matthias

+1

Diese Fiddle erlaubt _runtime_ Änderungen. http://jsfiddle.net/2FZU7/4/. Es basiert auf der "verwandten Diskussion", auf die Sie verwiesen haben. Auch weil Puffer vorab zugewiesen werden müssen, können Sie nicht zu einem komplizierteren Material wechseln, so dass in der neuen Geige beide Materialien "Lambert" sind. – WestLangley

Verwandte Themen