我似乎只找到了将光线投射器与相机配合使用的示例,但没有一个实例具有从A点到B点的光线投射器。
我有一个工作的光线投射器,它可以检索我的助手,线条等,但似乎无法识别我的球体。
我首先想到的是我的点不对,所以我决定创建一条从我的pointA到我的pointB的线,其方向如下:
var pointA = new Vector3( 50, 0, 0 );
var direction = new Vector3( 0, 1, 0 );
direction.normalize();
var distance = 100;
var pointB = new Vector3();
pointB.addVectors ( pointA, direction.multiplyScalar( distance ) );
var geometry = new Geometry();
geometry.vertices.push( pointA );
geometry.vertices.push( pointB );
var material = new LineBasicMaterial( { color : 0xff0000 } );
var line = new Line(geometry,material);
这将显示一条从我的球体(50 0 0)到(50 100 0)的球,该球在我的球体的右边(50,50,0),所以我的pointA和direction值正确。
接下来,我添加一个raycaster: 为了避免与任何副作用发生冲突,我在这里重新创建了观点:
var raycaster = new Raycaster(new Vector3( 50, 0, 0 ), new Vector3( 0, 1, 0 ).normalize());
var intersects = raycaster.intersectObject(target);
console.log(intersects);
对我来说似乎很直接,我也尝试使用raycaster.intersectObjects(scene.children),但它提供了Lines,helpers等,但没有提供我的球体。
我在做什么错?我肯定在这里错过了一些东西。
线和球的答案 0 :(得分:1)
在以下github问题中说明了您所看到的内容:
https://github.com/mrdoob/three.js/issues/11449
问题是从THREE.Raycaster
发出的光线不会直接撞击到面部,而是撞击到其顶点,因此不会产生相交。
有多种解决方法可以解决此问题,例如稍微移动几何形状或光线。对于您的情况:
var raycaster = new THREE.Raycaster( new THREE.Vector3( 50, 0, 0 ), new THREE.Vector3( 0, 1, 0.01 ).normalize() );
但是,更好的解决方案是修复引擎并使测试更可靠。
演示:https://jsfiddle.net/kzwmoug2/3/
three.js R106