2016-04-27 58 views
0

我用下面的代碼來實現交集。它適用於代碼中定義的幾何圖形。但它不檢測與Collada對象的交集。交集和Collada-Three.JS

 document.addEventListener('mousedown', Identify, false); 
     function Identify(event) { 

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

       raycaster.setFromCamera(mouse, camera); 
       var intersects = raycaster.intersectObjects(scene.children); 
       if (intersects.length > 0) { 
        if (INTERSECTED != intersects[ 0 ].object) { 
         if (INTERSECTED) INTERSECTED.material.color.setHex(INTERSECTED.currentHex); 
         INTERSECTED = intersects[ 0 ].object; 
         INTERSECTED.currentHex = INTERSECTED.material.color.getHex(); 
         INTERSECTED.material.color.setHex(0xff0000); 
        } 
       } else { 
        if (INTERSECTED) INTERSECTED.material.color.setHex(INTERSECTED.currentHex); 
        INTERSECTED = null; 
       } 

     } 

如何將Collada幾何體包含到交集矩陣中?

回答

0

這是通過在Colladaloader之後添加下面的代碼來推送所有對象來解決的。

var ToIntersect = []; 
dae.traverse(function(child) { 
    if (child instanceof THREE.Mesh) { 
     ToIntersect.push(child); 
    } 
}); 


... 

var intersects = raycaster.intersectObjects(ToIntersect); 
0

我有同樣的問題(在我的情況下,我被導入6軸機器人然後每個鏈接是一個鏈接的子對象),以便intersectObjects必須遞歸場景中通過將第二參數執行爲true,如在文檔中指出: http://threejs.org/docs/#Reference/Core/Raycaster

你可以嘗試改變你的代碼:

var intersects = raycaster.intersectObjects(scene.children, true);