我有一台透视相机,我想使用光线投射来找到播放器前面的物体。我找不到任何有关如何执行此操作的教程,而不是使用鼠标指针单击一个我不想做的对象。我在哪里可以找到如何做到这一点,或者我如何自己实现?或者我只是单独使用raycaster?
答案 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,选择相机指向的对象,与您使用的相机类型或其控件无关。