2017-10-09 153 views
0

我试图使用光线投射来获取球体和光线之间的交点,两者都位于场景的中心。这是一个非常简单的场景,但我无法使其工作。光线投射不给出任何交点

相关代码:

// 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 
+2

当您从对象内部投射光线时,它不计算背面。尝试使用'var material = new THREE.MeshStandardMaterial({side:THREE.DoubleSide});' – prisoner849

回答

1

在情况下,如果你想获得一个物体和光线,从对象的内部铸造之间的交集,那么,作为一个选项,你应该使用双面材料。

像这样:

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

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

注意,对于网格,面临着必须指出朝光线的起源以便被检测;没有检测到穿过脸部背部的光线的交点。要对对象的两个面进行光线投射,您需要将材质的边属性设置为THREE.DoubleSide。