2013-03-04 109 views
7

使用優秀的Sim.js和Three.js庫處理WebGL項目時,我偶然發現了下一個問題:TypeError Object [object object]沒有方法SubSelf,TypeError Object [object object]沒有方法intersectsPlane

沿途某處,它使用THREE.Ray下一構造:

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

其中載體是的Vector3,

這觸發了以下錯誤:

TypeError Object [object object]沒有方法subSelf。

我檢查,我使用從three.js所的文件和該的Vector3走近方法最這個人是

.sub(v) Vector3 

我試圖改變這一點,新的錯誤顯示了這個電話:

var intersects = ray.intersectScene(this.scene); 

因爲,當我檢查,射線沒有一個intersectsPlane方法

回答

14

相信three.js所API改變了一段時間後,再次拋出一個錯誤。

Vector3subSelf()is now simply sub(),正如您發現的那樣。

RayintersectsPlane()looks like it should be intersectPlane()

如果你想要複雜的場景交集,請改爲you probably want to use Raycaster。 Docs:http://mrdoob.github.com/three.js/docs/56/#Reference/Core/Raycaster

Three.js文檔不是有史以來最好的東西......但是,從簡單的inspecting the source code可以收集到很多洞察。

+0

實際上我第一次弄錯了,原始代碼是ray.IntersectScene,它不存在,我用intersectPlane替換它,它是Ray.js中存在的唯一相交,它產生了一個新的「不能調用方法點的undefine「錯誤 – maxandonuts 2013-03-04 21:29:40

+0

根據three.js遷移wiki,intersectScene不再存在,它推薦使用intersectObjects(數組),任何想法擁有此方法? – maxandonuts 2013-03-04 21:58:17

+1

@MaxRodriguezCollada你不想要一個'Ray',他們不再做複雜的碰撞。 「雷」現在是一個純粹的數學結構,但是現在射線由一個叫做「Raycaster」的新類完成。 https://github.com/mrdoob/three.js/blob/master/src/core/Raycaster.js – 2013-03-04 22:02:42

相關問題