【问题标题】:TypeError Object[object object] has no method SubSelf, TypeError Object[object object] has no method intersectsPlaneTypeError Object[object object] 没有方法 SubSelf,TypeError Object[object object] 没有方法 intersectsPlane
【发布时间】:2013-03-05 06:04:13
【问题描述】:

在使用出色的 Sim.js 和 Three.js 库处理 WebGL 项目时,我偶然发现了下一个问题:

在此过程中,它使用了 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 );

这再次引发错误,因为当我检查时,ray 没有 intersectsPlane 方法

【问题讨论】:

    标签: javascript three.js webgl


    【解决方案1】:

    我相信 THREE.js api 不久前发生了变化。

    Vector3subSelf() is now simply sub(),正如你所发现的那样。

    还有RayintersectsPlane()looks like it should be intersectPlane()

    如果你想要复杂的场景交叉,you probably want to use Raycaster 代替。文档:http://mrdoob.github.com/three.js/docs/56/#Reference/Core/Raycaster

    Three.js 文档并不是有史以来最好的东西...但是,从 inspecting the source code 中可以收集到很多见解。

    【讨论】:

    • 其实我第一次弄错了,原来的代码是ray.IntersectScene,它不存在,我用intersectPlane替换它是Ray.js中唯一存在的相交,它产生了一个新的“无法调用未定义的方法点”错误
    • 根据three.js迁移wiki,intersectScene不再存在,它建议使用intersectObjects(array),知道谁拥有这个方法吗?
    • @MaxRodriguezCollada 你不想要Ray,他们不再进行复杂的碰撞。 Ray 现在是一个纯粹的数学构造,但现在投射射线由一个名为Raycaster 的新类完成。 github.com/mrdoob/three.js/blob/master/src/core/Raycaster.js
    猜你喜欢
    • 2016-01-03
    • 1970-01-01
    • 2015-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-09
    • 1970-01-01
    相关资源
    最近更新 更多