使用光线投射检查具有第一人称控件的透视相机前面的对象

时间:2014-10-16 19:31:01

标签: three.js

我有一台透视相机,我想使用光线投射来找到播放器前面的物体。我找不到任何有关如何执行此操作的教程,而不是使用鼠标指针单击一个我不想做的对象。我在哪里可以找到如何做到这一点,或者我如何自己实现?或者我只是单独使用raycaster?

1 个答案:

答案 0 :(得分:3)

这很简单。 基于带有terrain的光线投射示例的代码 http://threejs.org/examples/#webgl_geometry_terrain_raycast 并在此参考 http://threejs.org/docs/#Reference/Core/Raycaster 您可以看到,您所要做的就是将Raycaster构造函数的第二个参数更改为指向与摄像机相同方向的矢量。 所以来自示例的以下代码

                var mouseX = ( event.clientX / window.innerWidth ) * 2 - 1;
                var mouseY = -( event.clientY / window.innerHeight ) * 2 + 1;

                var vector = new THREE.Vector3( mouseX, mouseY, camera.near );

                // Convert the [-1, 1] screen coordinate into a world coordinate on the near plane
                var projector = new THREE.Projector();
                projector.unprojectVector( vector, camera );

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

变为

                var vector = new THREE.Vector3(0, 0, -1);
                vector = camera.localToWorld(vector);
                vector.sub(camera.position); // Now vector is a unit vector with the same direction as the camera

                var raycaster = new THREE.Raycaster( camera.position, vector);

使用它应该始终创建一个raycaster,选择相机指向的对象,与您使用的相机类型或其控件无关。