2013-05-14 26 views
0

我們目前能夠使用下面的代碼加載多個collada文件,我們想知道我們將如何以不同的方式命名collada文件。命名多個不同於另一個的collada對象

下面是一些我們使用的功能:

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

在的loadFile功能,我們把每個COLLADA文件的的地址到一個數組並使用循環加載。該文件的呈現工作。但是,如果點擊該對象的名稱和/或標識,我們無法提醒它。

而不是發佈不同的名稱,所有對象點擊時呈現警告「SketchUp」。

使用「object.name =」name「」進行重命名也不起作用。我們希望你能回答這個問題。

+0

我有問題加載多個Collada模型。你可以在這方面幫助我嗎? – 2013-05-15 07:03:24

回答

1

我做了類似的事情,它對我來說非常適合選擇collada模型之一,並使用raycaster獲取它的名稱和ID。 (在場景中呈現多個collada模型)。

這裏的代碼和步驟是爲我工作的片段:

  • 創建新directionvector對象作爲全局變量。

變種directionVector =新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模型容器(放置您的renderer.domElement的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中進行命名,使其正確顯示。

相關問題