Three.js 三个不带摄像头的js raycaster

Three.js 三个不带摄像头的js raycaster,three.js,raycasting,Three.js,Raycasting,我似乎只找到了将光线投射器与相机配合使用的示例,但没有一个示例仅从a点到B点使用光线投射器 我有一个正在工作的光线投射器,它可以检索我的助手、线条等,但它似乎无法识别我的球体 我的第一个想法是我的点关闭了,所以我决定创建一条从点a到点B的线,方向如下: var pointA = new Vector3( 50, 0, 0 ); var direction = new Vector3( 0, 1, 0 ); direction.normalize(); var distance = 100; v

我似乎只找到了将光线投射器与相机配合使用的示例,但没有一个示例仅从a点到B点使用光线投射器

我有一个正在工作的光线投射器,它可以检索我的助手、线条等,但它似乎无法识别我的球体

我的第一个想法是我的点关闭了,所以我决定创建一条从点a到点B的线,方向如下:

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线=新线(几何图形、材质)

这将显示一条从我的点(50 0 0)到(50 100 0)的直线,穿过我的球体,该球体位于点(50,50,0)处,因此我的点a和方向值是正确的

接下来,我添加一个光线投射器: 为了避免与任何副作用发生冲突,我在此处重新创建了我的观点:

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),但它给出了线、辅助对象等,但没有给出我的球体

我做错了什么?我肯定错过了一些东西

直线和球体的IMG:

您看到的内容将在以下github版本中进行解释:

问题是从
THREE.Raycaster
发出的光线不会直接击中面,而是击中其顶点,从而导致不相交

有几种变通方法可解决此问题,例如稍微移动几何体或光线。对于您的情况:

var raycaster = new THREE.Raycaster( new THREE.Vector3( 50, 0, 0 ), new THREE.Vector3( 0, 1, 0.01 ).normalize() );
然而,更好的解决方案是修复引擎并使测试更加健壮

演示:


three.js R106

这就是我认为正在发生的事情,但当我对球体应用任意旋转(并更新了
矩阵世界
)时,似乎没有任何帮助。也许我的任意旋转不是那么任意的。:)谢谢你详尽的回答,很高兴知道我的观点,好的,问题是这个模糊:)。对我来说,这修正了它:sphere.geometry.rotateY(0.00002);sphere.updateMatrix世界();