2013-06-02 3 views
3

런타임시 서로 다른 표시 유형을 추가하고 제거하는 방법은 무엇입니까?런타임에 three.js 표시 등 추가 및 제거

각각 조명 유형을 나타내는 일부 체크 상자가 있는데 확인란을 선택하면 장면에 특정 조명 유형을 추가하고 선택하지 않으면 조명을 제거하고 싶습니다.

시도 : scene.remove(light)light.visible = false 시도했지만 작동하지 않았습니다.

답변

2

WebGLRenderer으로 조명 수 또는 조명 유형을 변경하면 material.needsUpdate = true을 설정해야합니다.

더 좋은 옵션은 광도를 0으로 설정하는 것입니다.

자세한 내용은 위키 문서 How to Update Things with WebGLRenderer을 참조하십시오.

three.js를 r.58

+0

감사합니다. 예, material.needsUpdate = true를 시도했지만 전역 var = material을 정의하고 설정하면 "정의되지 않은 속성의 needsUpdate를 설정할 수 없습니다."라는 오류가 발생합니다. mesh.material.needsUpdate = true가 사용되었습니다. 오류는 없지만 빛은 여전히 ​​보입니다. 나는 jQuery를 사용하고 있으며 $ (document) .ready() 안에 checkbox에 대한 변경 이벤트를 넣는다. render() 함수 안에 change 이벤트를 넣으려고했지만 빛은 여전히 ​​보입니다. 이 경우 궁금한 점은 이벤트 처리 기능을 넣을 곳이 어디인지에 있습니다. –

0

그것은 다음과 같이 나와 함께 일한 :

render(){ 
    // some other code .... 


    //light 
    if($('#dLight').is(':checked')){ 
     dLight.position.set($('#light-x').slider('value'),$('#light-y').slider('value'),$('#light-z').slider('value')).normalize(); 
     dLight.intensity = $('#light-intensity-id').slider('value'); 
     dLight.color.setHex('0x' + $('#light-color').val()); 
      scene.add(dLight); 
     }else{ 
      scene.remove(dLight); 
     } 

     if($('#pLight').is(':checked')){ 
      pLight.position.set($('#light-x').slider('value'),$('#light-y').slider('value'),$('#light-z').slider('value')); 
      pLight.intensity = $('#light-intensity-id').slider('value'); 
      pLight.color.setHex('0x' + $('#light-color').val()); 
      scene.add(pLight); 
     }else{ 
      scene.remove(pLight); 
     } 

     if($('#sLight').is(':checked')){ 
      sLight.position.set($('#light-x').slider('value'),$('#light-y').slider('value'),$('#light-z').slider('value')); 
      sLight.intensity = $('#light-intensity-id').slider('value'); 
      sLight.color.setHex('0x' + $('#light-color').val()); 
      scene.add(sLight); 
     }else{ 
      scene.remove(sLight); 
     } 

     if($('#aLight').is(':checked')){ 
      aLight.position.set($('#light-x').slider('value'),$('#light-y').slider('value'),$('#light-z').slider('value')); 
      aLight.color.setHex('0x' + $('#light-color').val()); 
      scene.add(aLight); 
     }else{ 
      scene.remove(aLight); 
     } 
    } 
0

숨길/표시 등 사용 : = false를 light.visible; // 또는 true

및 모든 자료가 필요하면 needsUpdate를 설정하십시오.

material.needsUpdate = true;

속성이 재료 객체 인 모든 객체가 하나의 객체 안에 있습니다.

for (var material in materials) { 
     if (materials.hasOwnProperty(material)) { 
      materials[material].needsUpdate = true; 
     } 
    } 

이렇게하면 모든 업데이트를 볼 수 있습니다. needsUpdate 트릭을하기 전에 대부분의 경우 아무것도 볼 수 없습니다.

+0

어떤 three.js 버전을 사용하고 있습니까? – WestLangley

+0

여기에서 확인할 수 있습니다. https://github.com/rantiev/threejs-clock 개정판 72를 사용하여 거의 최신 77 버전을 시도했으며 작동합니다. 버전 번호인지 여부는 잘 모르지만 버전 번호가없는 파일은 맨 위 부분에 아무것도 표시되지 않고 버전 번호가있는 배너 설명은 없습니다. – Rantiev

+0

죄송합니다. 나는 "개정"이라는 단어를 사용해야했다. "버전"은 동일한 것을 의미합니다. – WestLangley