ThreeJS 光线投射在 R81 中不同于 R71

ThreeJS raycasting is different in R81 than R71

我有一架飞机,上面有网格。当用户双击网格时,我的代码会绘制一个球。这在 R71 中工作得很好,但一旦我切换到 R81,raycaster 就不会 return 相交。这是代码:

在 init() 中:

// Plane
plane = new THREE.Mesh(
    new THREE.PlaneBufferGeometry( 1000, 1000, 3, 3 ),
    new THREE.MeshBasicMaterial( { color: 0xff0000, opacity: .5, transparent: true } )
);

plane.visible = false;
scene.add( plane ); 
planes.push(plane);

在 doubleClickEvent() 中:

event.preventDefault();

var mouse = new THREE.Vector2((event.clientX  / window.innerWidth ) * 2 - 1, -(((event.clientY / window.innerHeight ) * 2 - 1)));
var directionVector = new THREE.Vector3();
directionVector.set(mouse.x, mouse.y, 0.1);
directionVector.unproject(camera);
directionVector.sub(camera.position);           
directionVector.normalize();
raycaster.set(camera.position, directionVector);
intersects = raycaster.intersectObjects(planes);
if (intersects.length) {
    var sphereParent = new THREE.Object3D();
    var sphereGeometry = new THREE.SphereGeometry(.1, 16, 8);
    var sphereMaterial = new THREE.MeshLambertMaterial({ color: 0xffffff });
    var sphere = new THREE.Mesh(sphereGeometry, sphereMaterial);
    sphereParent.add(sphere);
    sphereParent.position.set(intersects[0].point.x, intersects[0].point.y, 0.0);
    scene.add(sphereParent);
    objects.push(sphereParent);
}

如果我改变

intersects = raycaster.intersectObjects(planes); 

intersects = raycaster.intersectObjects(scene.children);

球被画出来了,但是画错了位置。

有什么想法吗?

我找到了答案。光线投射不起作用的原因是飞机的能见度是错误的。解决方案是更改 material 可见性而不是平面的可见性。