2016-07-26 2 views
0

나는 카메라의 자식 인 물체 (비행기)를 가지고있어서 '화면에 고정'되어 있습니다.THREE.JS 카메라의 어린이에게 레이 케스팅

   plane = new THREE.Mesh(new THREE.PlaneGeometry(10, 10, 10, 10), material); 

       plane.position.set(0,0,-5); 

       camera.add(plane); 

이 비행기에는 내가 움직이고 싶은 다른 물체가 있는데 비행기에 레이 캐스트를 보냅니다.

   if(INTERSECTED){ 

       handleEvent(); 

       raycaster.setFromCamera(mouse, camera); 

       var intersects = raycaster.intersectObject(plane); 

       if(intersects.length>0){ 

        //what is happening here? 
        //these points are definitely not on the plane! 


        var x = intersects[0].point.x; 
        var y = intersects[0].point.y; 
        var z = intersects[0].point.z; 

        INTERSECTED.position.set(x,y,z); 

        console.log(x,y,z); 

       }   
      } 

광선이 비행기에 부딪히는 위치가 나를 감각적으로 만들지 않습니다!

제발 도와주세요, 막혔습니다! 감사합니다.

jsfiddle.net/74jLjz6q/2 

PS : 여기

는 바이올린입니다 내가 .. 내가 거기에 내 문제에 대한 도움을 찾을 수 없습니다 카메라가 다른 객체의 자식이었다 비슷한 문제,이 게시물을 발견

그것은 다른 주변 방식 (지역에 세계)해야했다 ..

THREE.js Raycasting from a child camera to the scene

+0

'true는 레이 캐스터에게 자식을 들여다 보도록 지시 한 다음 'intersects [0]'이 첫 번째 객체가 교차해야 함을 나타냅니다. – Rush2112

답변

1

좋아요, 나는 흔적 착오를 얻었다. 난 정말이 이해하는 경우

는 잘 모르겠어요 ..

그래서, 포인트가 월드 공간에 제공됩니다. (.. 레이크 캐스터가 항상 그렇기 때문에) 비행기가 카메라의 자식이기 때문에 로컬 공간에 있어야합니다.

맞습니까?

(AND I 수동 카메라와 평면 사이의 거리를 빼지했다.)

plane.worldToLocal(intersects[0].point); 
INTERSECTED.position.set(intersects[0].point.x,intersects[0].point.y,intersects[0].point.z-5); 

업데이트 및 작업 바이올린 (큐브 마침내 비행기에 남아 :)!) :

http://jsfiddle.net/74jLjz6q/9/

+1

예 : three.js 문서를 확인했습니다. (http : //threejs.o rg/docs /? q = Raycaster # Reference/Core/Raycaster) 당신이 맞습니다. 항상 세계 좌표를 반환하기 때문에 로컬 좌표계로 변환해야합니다. – Alexus

관련 문제