2016-10-12 3 views
0

私はそれにメッシュを持つ平面を持っています。私のコードは、ユーザーがメッシュをダブルクリックするとボールを描画します。これはR71でうまく動作しますが、R81に切り替えた直後にレイキャスターは交差を返しません。ここでは、コードです:R81ではThreeJSのレイキャスティングがR71と異なります

のinitで():doubleClickEventで

// 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); 

():

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(scene.children); 

intersects = raycaster.intersectObjects(planes); 

を変更した場合

ボールは描画されますが、間違った位置に描画されます。

アイデア?

答えて

2

答えが見つかりました。レイキャストが機能しない理由は、飛行機の可視性が偽であるためです。解決策は、平面ではなく物質の可視性の可視性を変更することです。

関連する問題