2012-06-14 11 views
14

Chcę, aby części siatki były niewidoczne w czasie wykonywania. Czy mogę ustawić te części jako niewidoczne/przezroczyste, np. zmieniając atrybuty pojedynczych twarzy? Sama siatka wykorzystuje tylko jeden materiał.Czy mogę ukryć twarze siatki w pliku three.js?


Przykładowa ilustracja jako edytorze rozumie to pytanie: Wyobraź siatkę (tutaj z geometrią 20 wierzchołków), gdzie każdy quad czterech wierzchołków buduje Face4. Teraz niektóre części siatki powinny stać się niewidoczne (tutaj dwie twarze są niewidoczne).

example

+0

Twoje pytanie nie jest zbyt jasne. Czy próbujesz ustawić widoczność twarzy jako fałszywą (uczynić ją niewidzialną)? – frank

+0

Edytowałem to pytanie w sposób, w jaki go rozumiem. Szczególnie, ponieważ mam również to pytanie i nie chcę tworzyć duplikatu. – Matthias

Odpowiedz

23

można przypisać inny materiał do każdej twarzy. Oto przykład, w którym twarze dzielić materiał, ale niektóre twarze są przejrzyste:

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

Updated Fiddle pokazujący jeden sposób na zmianę materiału w czasie wykonywania: http://jsfiddle.net/e0x88z7w/

EDIT: MeshFaceMaterial została zaniechana. Zaktualizowano post i skrzypce.

three.js r.87

+0

Ale jak mogę zmienić te materiały twarzy w * środowisku wykonawczym *? Dodałem detektor kliknięcia do [Fiddle] (http://jsfiddle.net/2FZU7/2/), który powinien sprawić, że wszystkie twarze znów będą żółte, ale * nie działa *. Znalazłem [powiązaną dyskusję] (https://github.com/mrdoob/three.js/issues/1303) na ten temat. – Matthias

+0

** Uwaga: ** Ponowne zaznaczenie wszystkich twarzy na żółto jest sprzeczne z przypadkiem użycia pytania. Ja [zmieniłem kod] (http://jsfiddle.net/2FZU7/3/), aby zastosować przezroczysty materiał do każdej twarzy po kliknięciu, która również nie działa. – Matthias

+1

To skrzypce umożliwia zmianę _runtime_. http://jsfiddle.net/2FZU7/4/. Opiera się na "odnośnej dyskusji", do której się odwołałeś. Również dlatego, że bufory muszą być wstępnie przydzielone, nie można zmienić na bardziej skomplikowany materiał, więc w nowym skrzypce oba materiały to "Lambert". – WestLangley

Powiązane problemy