2012-06-14 3 views
14

런타임에 메쉬의 일부를 보이지 않게하고 싶습니다. 이 부분을 보이지 않거나 투명하게 설정할 수 있습니까? 단일 얼굴의 속성을 변경함으로써? 메쉬 자체는 하나의 재질 만 사용합니다. (20 개 정점의 구조와 여기) 메쉬를 상상해 네 개의 꼭지점의 각 쿼드가 Face4 축적 다음 편집기three.js에서 메쉬의면을 숨길 수 있습니까?


실시 그림이 질문을 이해한다. 이제 메쉬의 일부분을 보이지 않게해야합니다 (여기서는 두 개의면이 보이지 않습니다).

example

+0

귀하의 질문은 명확하지 않습니다. 얼굴의 가시성을 false로 설정하려고합니까 (보이지 않게하십시오)? – frank

+0

나는이 질문을 내가 이해하고있는 방식으로 편집했다. 특히이 질문을하고 중복을 만들고 싶지 않기 때문에 특히 그렇습니다. – Matthias

답변

23

각면에 다른 물질을 할당 할 수 있습니다. 여기에 얼굴이 자료를 공유하는 예이지만, 일부면이 투명 : 런타임에 재료를 변경하는 방법 중 하나를 보여주는 바이올린 업데이트

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

: http://jsfiddle.net/e0x88z7w/

편집 : MeshFaceMaterial가 사용되지 않습니다. 소식과 피들이 업데이트되었습니다.

three.js r.87

+0

그러나 이러한 얼굴 재질을 * runtime *에서 어떻게 변경합니까? [Fiddle] (http://jsfiddle.net/2FZU7/2/)에 클릭 청취자를 추가했는데 모든 얼굴을 다시 노란색으로 만들지 만 * 작동하지 않습니다 *. 나는 [관련 토론] (https://github.com/mrdoob/three.js/issues/1303)을 발견했다. – Matthias

+0

** 비고 : ** 모든 얼굴을 다시 황색으로 만드는 것은 질문의 유스 케이스에 대한 것입니다. 물론 나는 작동하지 않는 클릭의 모든면에 투명 재질을 적용하기 위해 [코드 변경] (http://jsfiddle.net/2FZU7/3/)을 사용했습니다. – Matthias

+1

이 피들은 _runtime_ 변경을 허용합니다. http://jsfiddle.net/2FZU7/4/. 그것은 당신이 참조한 "관련 토론"을 기반으로합니다. 또한 버퍼를 미리 할당해야하기 때문에 더 복잡한 자료로 변경할 수 없기 때문에 새로운 자료에서 두 자료는 모두 '램버트'입니다. – WestLangley

관련 문제