2012-11-07 19 views
1

我一直在與谷歌在全球的WebGL並試圖獲得一些基本的相互作用的地方,其中之一包括點擊由緯度,經度產生的酒吧等intersectObjects不是函數

從我看過的大量的three.js例子來看,答案就在於投影儀和光線找到交點。我遇到的問題是與下面的代碼,這已略有從幾個其它來源的扭捏:

var projector = new THREE.Projector(); 

if (event.target == renderer.domElement) { 
    var x = event.clientX; 
    var y = event.clientY; 
    var v = new THREE.Vector3((x/w)*2-1, -(y/h)*2+1, 0.5); 
    projector.unprojectVector(v, camera); 
    var ray = new THREE.Ray(camera.position, v.subSelf(camera.position).normalize()); 
    var intersects = ray.intersectObjects(scene.children); 
    if (intersects.length > 0) { 
     console.log("success"); 
    } 
} 

「ray.intersectObjects不是一個函數」是錯誤,具體。

任何想法?提前致謝。

回答

1

看來您使用的是舊版本的庫。更新至r.52。

+0

我也想到了這一點,所以我抓住了最新的一個,並更新了我的圖書館。我仍然收到相同的錯誤信息。我真的認爲這就是它! =/ – gotohales

+0

啊。所以你使用的是舊版本。只要定義了'w'和'h',你的代碼就可以與r.52一起工作。現在有什麼錯誤? – WestLangley

+0

是的,我使用的是一個月或兩個月前的版本,但它似乎不是一個版本問題,因爲** intersectObjects不是函數**錯誤仍然出現。很奇怪。 – gotohales

0

請嘗試添加一個數組中的場景對象,並嘗試下面的代碼。

function onDocumentMouseDown(event) { 
      event.preventDefault();    
      var vector = new THREE.Vector3( 
        (event.clientX/window.innerWidth) * 2 - 1, 
        - (event.clientY/window.innerHeight) * 2 + 1, 
        0.5); 

       projector.unprojectVector(vector, camera); 
       var ray = new THREE.Ray(camera.position, vector.subSelf(camera.position).normalize()); 

       var intersects = ray.intersectObjects(objects);         

       if (intersects.length > 0) {    
        console.log("success");     
       }       

       document.addEventListener('mousemove', onDocumentMouseMove, false); 
       document.addEventListener('mouseup', onDocumentMouseUp, false); 
       document.addEventListener('mouseout', onDocumentMouseOut, false); 


      mouseXOnMouseDown = event.clientX - windowHalfX; 
      targetRotationOnMouseDown = targetRotation; 
     } 
+0

嗯,還是回來「intersectObjects是不是一個函數」。我不知道它是否有幫助,但是看看DOM中的ray對象,它似乎只有「intersectObject」和「intersectScene」方法可用。 – gotohales

10

這不好回答......的解決方案是使用new THREE.Raycaster - 不THREE.Ray

+0

仍然有幫助 - OP應該肯定標記爲答案。 – Kevin