2014-10-16 16 views
0

我有一個透視相機,並希望使用Raycasting查找播放器前面的物體。我無法找到關於如何執行此操作的任何教程,而不是使用鼠標指針來點擊我不想做的對象。我在哪裏可以找到如何做到這一點,或者我如何自己實現這一點?或者我只是單獨使用raycaster?使用光線投射檢查透視相機前面的物體與第一人稱控制

+1

實例化一個'Raycaster',你可以重用。設置raycaster的原點和單位長度方向矢量。調用'Raycaster.intersectObjects()'。如果您遇到問題,請發佈您的代碼。 – WestLangley 2014-10-16 20:30:45

回答

2

這很簡單。 基於光線投影例如與地形 http://threejs.org/examples/#webgl_geometry_terrain_raycast 代碼,並在此引用 http://threejs.org/docs/#Reference/Core/Raycaster 你可以看到所有你需要做的就是改變Raycaster構造函數的第二個參數,在相同的方向指向一個向量相機呢。 於是從例如

   var mouseX = (event.clientX/window.innerWidth) * 2 - 1; 
       var mouseY = -(event.clientY/window.innerHeight) * 2 + 1; 

       var vector = new THREE.Vector3(mouseX, mouseY, camera.near); 

       // Convert the [-1, 1] screen coordinate into a world coordinate on the near plane 
       var projector = new THREE.Projector(); 
       projector.unprojectVector(vector, camera); 

       var raycaster = new THREE.Raycaster(camera.position, vector.sub(camera.position).normalize()); 

下面的代碼變得

   var vector = new THREE.Vector3(0, 0, -1); 
       vector = camera.localToWorld(vector); 
       vector.sub(camera.position); // Now vector is a unit vector with the same direction as the camera 

       var raycaster = new THREE.Raycaster(camera.position, vector); 

使用這個總是應該在創建獨立的攝像頭使用,或者它的類型的raycaster該選擇對象由相機指出,控制。