2016-11-04 2 views
0

저는 초보자 인 three.js을 사용하고 있습니다. 하나의 단일 물체에 두 개의 물질을 정의하려고합니다. 두 개의 물체를 visibilty 플래그를 사용하여 교대로 만들었지 만 성공하지 못했습니다. 다른 방법이 있습니까, 아니면이 작업을 수행 할 수 있습니까?하나의 물체에 교번하는 물질

var materials = [ 
    new THREE.MeshPhongMaterial({ color: 0x00ff00,visible:true, shininess: 1 }), 
    new THREE.MeshPhongMaterial({ color: 0xff0000,visible:false, shininess: 1 }) 
]; 

obj= THREE.SceneUtils.createMultiMaterialObject(geometry, materials); 
scene.add(obj); 

scene.traverse(function (node){ 
    if(node instanceof THREE.Mesh) { 
     node.visible =!node.visible; 
    } 
}); 

내가 entually aplly이 나는 scene.traverse이 자료에 대한 가시성을 적용하려는 것 같습니다

답변

0

을 사용하고 있습니다 이유 장면의 모든 객체에, 아직 당신이있어 것 너의 횡단 도중 메시를 검사. 귀하의 자료 정의에서 visibility: true/false를 제거하고 다음 줄을 추가합니다 : 이것은 createMultiMaterialObject에 의해 생성 된 두 번째 메시에 visibility = false을 적용합니다

obj= THREE.SceneUtils.createMultiMaterialObject(geometry, materials); 
obj.children[1].visible = false; // add this line 
scene.add(obj); 

. 트래버스하면 메쉬의 가시성을 올바르게 뒤집을 수 있습니다.

THREE.js을 더 잘 알게되면 THREE.MultiMaterial과 여러 메시를 하나의 메쉬에 적용하기위한 지오메트리 그룹을 살펴볼 수 있습니다.

+0

고마워요, 그 속임수를했습니다. .children []으로 각 머티리얼을 가져올 수 있으며 머티리얼의 매개 변수를 변경할 수 있습니까? –

+0

물론입니다! '.material' 속성을 통해 메쉬의 재질에 접근 할 수 있습니다. 예를 들어,'var materialOfMesh2 = obj.children [1 ].material'. 거기에서 다음과 같은 재질 속성을 변경할 수 있습니다 :'materialOfMesh2.color.setRGB (1, 0, 0);'중단 점과 브라우저 개발자 도구 (일반적으로 F12)를 사용하여 객체의 다양한 속성을 탐색하고, 더 자세한 정보는 THREE.js 문서를 참조하십시오. – TheJim01

+0

감사합니다. 큰 도움이되었습니다! –

관련 문제