2013-03-04 93 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

相关问题