THREE.JS对相机的孩子进行Raycasting

时间:2016-07-26 21:31:30

标签: three.js raycasting

我有一个物体(平面),它是相机的一个孩子,所以它固定在屏幕上。

                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

1 个答案:

答案 0 :(得分: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/