2016-07-26 50 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

嘗試使用'raycaster.intersectObject(plane,true);'true告訴raycaster通過子視圖,然後'intersects [0]'應該是第一個相交的對象 – Rush2112

回答

1

歐凱,我通過試錯得到了它。

我不知道如果我真的明白這一點..

因此,在世界空間中提供的點。 (..因爲THREE.Raycaster總是這樣嗎?) 它必須在本地空間,因爲飛機是相機的孩子。

是嗎?

(我不得不手動的。減去相機和平面之間的距離。)

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