2016-07-26 10 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はレイキャスターに子供を見て、次に交差する[0]が最初に交差するオブジェクトであることを伝えます – Rush2112

答えて

1

オーケー、私は試行錯誤によってそれを得ました。

私は本当にこれを理解している場合はわからない。..

ので、ポイントはワールド空間に設けられています。 (なぜなら、レイキャスターはいつもですか?) そして、飛行機はカメラの子供なので、ローカルスペースにいなければなりません。

そうですか?

(と私は手動でカメラと面との距離を減算する持っていた。)

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

関連する問題