不带相机的三个js raycaster

时间:2019-07-24 08:23:30

标签: three.js raycasting

我似乎只找到了将光线投射器与相机配合使用的示例,但没有一个实例具有从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等,但没有提供我的球体。

我在做什么错?我肯定在这里错过了一些东西。

线和球的

IMG: enter image description here

1 个答案:

答案 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