2016-04-27 3 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 должна выполняться рекурсивно в сцене, поставив второй параметр истинно, как указано в документации: http://threejs.org/docs/#Reference/Core/Raycaster

вы можете попытаться изменить вам код:

var intersects = raycaster.intersectObjects(scene.children, true); 
Смежные вопросы