2016-05-29 28 views
0

所以我在一個遊戲世界裏工作,一切都包含在一個skydome(應用了環境紋理的巨大球體)中。天空中的三個js Raycast

我試圖找出射線在天球線內的相交點,以便找出矢量球員將需要移動。

到目前爲止我發現的唯一問題是光線不會被投射到天空雲臺內,而是在它外面放大。

這就是raycaster在我身邊的樣子。

 mouse.x = (event.clientX/window.innerWidth) * 2 - 1; 
     mouse.y = - (event.clientY/window.innerHeight) * 2 + 1; 

     // update the picking ray with the camera and mouse position 
     raycaster.setFromCamera(mouse, camera); 
     // raycaster.set(playerModel, c); 

     // calculate objects intersecting the picking ray 
     var intersects = raycaster.intersectObjects(scene.children, true); 

     console.log(intersects); 
     for (var i = 0; i < intersects.length; i++) { 

      intersects[ i ].object.material.color.set(0xff0000); 

     } 

而且,我會gratefull如果有人能解釋我如何得到載體,其中光線投射去,不使用raycaster.setFromCamera(mouse, camera);raycaster.set(playerModel, targetVector); 目的矢量是否需要是體育館的位置矢量?

回答

0

工作例如我用manytimes:

var spaceplane = [];   
var spaceMaterial = new THREE.MeshBasicMaterial(); 
    spaceMaterial.side = THREE.BackSide; 
var meshSpace = new THREE.Mesh(new THREE.IcosahedronGeometry(1000000, 1) , spaceMaterial);  
    meshSpace.rotation.order = 'XZY'; 
    spaceplane.push(meshSpace); 
    //// add to the scene of course 

//////////////// selection on mouse click etc... 
var raycaster = new THREE.Raycaster(); 
    raycaster.setFromCamera(mouse, camera); 
var intersects = raycaster.intersectObjects(spaceplane, true); 


if (intersects.length > 0) {       
          /// here you have intersection  
} 
+0

我剛剛發現,通過使用'SkyDome.material.side = Three.DoubleSide'工作對我來說,也返回線的交點。不過在由於它是從相機設置的,因此ray不會投射精確點擊的座標。 –

+0

然後接受這個答案,並提出另一個問題,從另一個角度進行光線投射。 – Martin