2013-05-14 2 views
0

과 다르게 명명하고 있습니다. 현재 아래 코드를 사용하여 여러 개의 collada 파일을로드 할 수 있습니다. 우리는 어떻게 collada 파일의 이름을 다르게 지정할 수 있는지 알고 싶습니다.여러개의 collada 객체를 다른

LoadFile과 기능에서
function loadFiles(){ 
    urls.push('./model/e1.dae'); 
    urls.push('./model/e2.dae'); 
    urls.push('./model/e3.dae'); 
    urls.push('./model/e4.dae'); 
    urls.push('./model/e5.dae'); 
    for(var i =0; i<urls.length; i+=1) { 
     var loader = new THREE.ColladaLoader(); 
     loader.options.convertUpAxis = true; 
     loader.load(urls[i], function(collada) { 

      var object = collada.scene; 
      object.updateMatrix(); 
      object.position.x = Math.random()*500-200; 
      object.position.y = Math.random()*200-100; 
      object.scale.x = object.scale.y = object.scale.z = 2; 
      object.rotation.y -= (90)*(Math.PI/180); 
      object.rotation.x = (90)*(Math.PI/180); 
      object.position.z = 10; 
      scene.add(object); 
      renderer.render(scene, camera); 
     }); 
    } 
} 


function onDocumentMouseDown(event){ 
    event.preventDefault(); 
    toIntersect = []; 
    scene.traverse(function (child) { 
     if (child instanceof THREE.Mesh) { 
      toIntersect.push(child); 
     } 
    }); 
    raycaster = projector.pickingRay(mouse2D.clone(), camera); 
    var intersects = raycaster.intersectObjects(toIntersect); 

    alert(intersects[0].object.name); 
} 

, 우리는 배열로 COLLADA 파일의 각각의 어드레스를 넣고 루프를 사용하여로드 :

은 여기 사용 된 함수의 일부이다. 파일 렌더링이 작동합니다. 그러나 클릭 한 경우 개체의 이름 및/또는 ID를 경고 할 수 없습니다.

다른 이름을 출시하는 대신 렌더링 된 모든 개체는 클릭하면 "SketchUp"으로 경고합니다.

"object.name ="name ""을 사용하여 이름을 바꾸는 중 하나도 작동하지 않습니다. 이 질문에 답할 수 있기를 바랍니다.

+0

을 동시에 Collada 모델. 이 점에 대해 제발 도와주세요. –

답변

1

나는 비슷한 것을했으며 collada 모델을 선택하고 raycaster를 사용하여 이름과 ID를 얻는 데 완벽하게 작동합니다. 장면에 렌더링 된 여러 개의 콜라다 모델이 있습니다.

  • 하는 전역 변수와 같은 새로운 directionvector 객체를 생성 : 여기

    나를 위해 노력하고 코드와 단계의 조각입니다.

var directionvector = new THREE.Vector3();

  • 전역 변수와 같은 새로운 마우스, raycaster, 프로젝터 개체를 만듭니다.
    var mouse = new THREE.Vector2(); 
    
    var raycaster = new THREE.Raycaster(); 
    
    var projector = new THREE.Projector(); 
    
  • 는 onDocumentMouseMove 이벤트 기능을 작성하고 COLLADA 모델을로드 한 후 COLLADA 모델 용기에 (당신의 renderer.domElement 배치 DOM을)를 연결합니다.

    function onDocumentMouseMove(event) { 
          event.preventDefault(); 
          mouse.x = (event.clientX/window.innerWidth) * 2 - 1; 
          mouse.y = -(event.clientY/window.innerHeight) * 2 + 1; 
    

    은}

your_collada_model_container.mousemove(onDocumentMouseMove);

  • 은 COLLADA 모델에 클릭 이벤트에 를 부착 컨테이너 (귀하의 렌더러 도메인 요소 배치 된 DOM).

  • 컨테이너를 클릭하면,이 함수를 호출 :

    기능 selectColladaModel() {

    directionVector.set(mouse.x, mouse.y, 1); 
          projector.unprojectVector(directionVector, camera); 
          directionVector.sub(camera.position); 
          directionVector.normalize(); 
          raycaster.set(camera.position, directionVector); 
          var intersects = raycaster.intersectObjects(scene.children, true); 
          if (intersects.length) { 
           var target = intersects[0].object; 
           if(target){ 
            console.log(target.name+" "+target.id); 
           } 
          } 
    

    } 나는 여러로드에 대한 문제가 있었다

0

var object = collada.scene; 바로 다음에 object.name = urls[i];이라고 말할 수 있습니다. 범위 문제가있을 수 있지만 아이디어를 얻을 수 있습니다. 그렇지 않으면 올바른 것으로 나오도록 Sketchup에서 이름을 지정할 수 있습니다.