光线投射不给出任何交点

Raycasting doesn't give any intersections

我正在尝试使用光线投射来获得位于场景中心的球体和光线之间的交点。这是一个非常简单的场景,但我无法让它发挥作用。

相关代码:

// renderer, camera, etc...

var material = new THREE.MeshStandardMaterial();
material.opacity = 0.25;
material.transparent = true;
sphere = new THREE.Mesh(new THREE.SphereGeometry(100, 32, 32), material);
scene.add(sphere);

var start = new THREE.Vector3(0, 0, 0);
var direction = new THREE.Vector3(-84, 102, 97);
var ray = new THREE.Raycaster(start, direction.normalize());
scene.updateMatrixWorld();
var rayIntersects = ray.intersectObjects([sphere], true);

console.log(rayIntersects); // empty array

如果您想要在对象和从对象内部投射的光线之间获得交点,那么,作为一种选择,您应该使用双面 material.

像这样:

var material = new THREE.MeshStandardMaterial({ side: THREE.DoubleSide });

THREE.Raycaster() 的文档,在关于 .intersectObject ( object, recursive ) 方法的解释部分的末尾,说:

请注意,对于网格,面必须指向光线的原点才能被检测到;将不会检测到穿过面部背面的光线的交点。要对对象的两个面进行光线投射,您需要将 material 的一侧 属性 设置为 THREE.DoubleSide。