2013-08-07 2 views
0

여러 개의 큐브를 만들고 각 큐브에 클릭 이벤트를 추가하고 GeometryUtils.merge를 사용하여 "부모"개체에서 결합하려고합니다.three.js - intersectObjects with GeometryUtils.merge

var cubes=[]; 
    var mainGeom = new THREE.Geometry(); 
    var cubegeometry = new THREE.CubeGeometry(50, 50, 50, 1, 1, 1); 

    cubes[1] = new THREE.Mesh(cubegeometry); 
    cubes[1].position.y = -50; 
    THREE.GeometryUtils.merge(mainGeom, cubes[1]); 

    cubes[2] = new THREE.Mesh(cubegeometry); 
    cubes[2].position.y = 50; 
    THREE.GeometryUtils.merge(mainGeom, cubes[2]); 

    cubes[3] = new THREE.Mesh(cubegeometry); 
    cubes[3].position.z = -50; 
    THREE.GeometryUtils.merge(mainGeom, cubes[3]); 

    cube = new THREE.Mesh(mainGeom,new THREE.MeshBasicMaterial({ color: 0xff0000 })); 

결합이 잘 작동합니다. 하지만 각 이벤트에 클릭 이벤트를 어떻게 추가합니까? 나는 이것을 사용하고있다 :

function onDocumentMouseDown(event) { 
    event.preventDefault(); 

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

    var vector = new THREE.Vector3(mouse.x, mouse.y, 0.5); 
    projector.unprojectVector(vector, camera); 

    var raycaster = new THREE.Raycaster(camera.position, vector.sub(camera.position).normalize()); 
    var intersects = raycaster.intersectObjects(cube); 

    if (intersects.length > 0) { 
     console.log(intersects); 
    } 
} 

그러나 intersects.length는 항상 0이다! 내가 뭘 잘못하고 있니?

고맙습니다.

감사합니다 - 한국 산업 안전 보건 공단

+0

독립형 클릭을 원할 경우 왜 지오메트리를 병합 하시겠습니까? 병합하지 않고 단순히 부모 Object3D에 큐브를 추가 할 수 있어야합니다. –

+0

'Raycaster.intersectObjects()'는 배열을 인수로받습니다. 메쉬로 전달 중입니다. – WestLangley

+0

@WestLangley - 나는 그것을 알고 있고 또한 intersectObject를 사용하여 검사했지만 또한 작동하지 않았다. –

답변

0

GeorgeProfenza 나에게 좋은 힌트를 주었다. 솔루션은 이러한 Subobject를 부모 객체에 추가 한 다음 솔루션이었습니다! 감사합니다