2012-12-06 291 views
1

我現在正在爲此苦苦掙扎幾天,最終我放棄了並決定問你。我試圖有一個簡單的對象檢測,因爲inetersectScene被交換對象,這是不遞歸的替換我正在創建一個新的數組,我存儲所有對象,我想與之交互。我正在嘗試使用純網格物體和object3d,它不適用於它們兩個。然後我將數組傳遞給intersectObjects函數,但返回的數組總是空的。intersectedObjects不能正常工作

下面是一些代碼:

// Translate page coords to element coords 

var offset = $(this.renderer.domElement).offset(); 

var eltx = pagex - offset.left; 

var elty = pagey - offset.top; 

// Translate client coords into viewport x,y 

var vpx = (eltx/this.container.offsetWidth) * 2 - 1; 

var vpy = -(elty/this.container.offsetHeight) * 2 + 1; 


var vector = new THREE.Vector3(vpx, vpy, 0.5); 

this.projector.unprojectVector(vector, this.camera); 

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

//console.log(ray); 

var intersects = ray.intersectObjects(this.intersectedList); 

console.log(intersects.length); 

任何想法?

回答

0

您的代碼不工作,因爲你的相機是多個對象的孩子/孫子,其中一個已申請轉換。

this.camera.parent.parent.position.y 

返回-249。因此this.camera.position不是真正的世界相機位置。

嘗試使用this.camera.matrixWorld.getPosition().clone()代替。

像這樣:

​​

three.js所r.53

+0

所以basicaly的camera.parent應該是情景嗎?如果沒有 - 我不能輪換...所以這意味着我不能使用控件? (OrbitControls) –

+0

我編輯了我的答案。這可能不是一個three.js問題。看看你能否得到它的工作。 – WestLangley

+0

它肯定是相機的位置,因爲當我改變它,並開始移動intersectObjects開始回調一些對象,但我的光標是隨機的位置。任何其他想法如何我可以修改相機?另一個問題是我應該使用我正在構建的對象的列表I還是scene.children將作爲intersectObjects的參數來完成工作?真的非常感謝你的時間... –

0

intersectObjects具有遞歸標誌:

var intersects = ray.intersectObjects(this.intersectedList, true);