2012-12-14 15 views
-1

我一直玩three.js幾個星期了,並且在raycast上得到了一些不一致。 下面是一個簡化的版本展示我encoutered錯誤之一:雷路口和兒童相機

http://jsfiddle.net/eMrhb/12/

相機被添加到球齧合用於進一步使用TrackBallControl例如。

scene.add(mesh);  
mesh.add(camera); 

點擊球,並打開控制檯幾次,告訴我們沒有射線之間的預期交叉。

添加攝像機到現場(http://jsfiddle.net/eMrhb/9/),解決了這個問題:

scene.add(mesh);  
scene.add(camera); 

但是我可以用我的場景中的物體與相機之間的一個複雜得多的層次結構,以滿足我的需求。

這是一個限制嗎?如果是這樣,是否有任何解決方法可以使用?

+0

我不知道你爲什麼越來越下降-voted。這對我來說似乎是一個非常好的問題...... – WestLangley

+0

也許是因爲您沒有像第一小提琴那樣直接將相機添加到場景中。 – WestLangley

+0

請原諒我的(英文)錯誤,_directly_不是正確的詞,我會解決這個問題。 – lutangar

回答

0

是的,這是可以修復的。

如果相機是旋轉或翻譯的另一個對象的孩子,則必須在光線投射中使用不同的圖案。

而是這個熟悉的模式:

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

你必須用這種模式來代替:

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

three.js所r.53

+0

確實解決了這個問題:。非常感謝你。 在嵌套對象的情況下,會不會總是做這個工作,還是需要通過討厭的向量乘法和其他對象來更新矩陣? 我在wiki上看過_Camera的位置和目標會自動更新._這隻適用於本地位置嗎? – lutangar

+0

我相信這個解決方案將按原樣工作。我不清楚這位維基作者的意思是你引用的報價。如果您還有其他問題,請發佈新問題。 – WestLangley