在从Three.js 68到69的端口:无法读取属性' boundingSphere'未定义的

时间:2014-11-03 22:48:08

标签: javascript three.js migration

我正在将项目从Three.js v68移植到v69,并且在Three.js v69的第6077行收到错误Uncaught TypeError: Cannot read property 'boundingSphere' of undefined

这是THREE.Frustrum.prototype

中的一个功能
intersectsObject: function () {
    var sphere = new THREE.Sphere();
    return function ( object ) {
        var geometry = object.geometry;
        if ( geometry.boundingSphere === null ) geometry.computeBoundingSphere();
        sphere.copy( geometry.boundingSphere );
        sphere.applyMatrix4( object.matrixWorld );
        return this.intersectsSphere( sphere );
    };
}(),

在我的代码中我应该注意哪些迁移?

我正在从68切换到69,以便使用几个THREE脚本进行一些后处理(THREE.EffectsComposer和其他here)。这些脚本现在要求使用PlaneBufferGeometry 69(可能还有其他内容)。

更新 这是堆栈跟踪:

Uncaught TypeError: Cannot read property 'boundingSphere' of undefined Three_69_max.js:6077
(anonymous function) Three_69_max.js:6077
projectObject Three_69_max.js:21161
projectObject Three_69_max.js:21200
render Three_69_max.js:21035
animLoop.render AnimationLoop.js:161
animate MainBreederProgram.js:14
init MainBreederProgram.js:32
...

更新 深入研究调用堆栈时,在我的场景中询问Object3D的几何图形时,它似乎崩溃了。 Object3D持有一组其他Object3D并且没有自己的固有几何 - 它只是为了方便起见,所以我可以轻松访问它包含的对象集。

2 个答案:

答案 0 :(得分:0)

使用@ WestLangley上面的建议我改变了我的代码组织。最初我一直在使用Object3D来在场景中保存不同的对象集(通过v68) - 这样我就可以轻松访问它们并在动画的更新阶段迭代场景内容的子集。从v69开始,我现在已经将所有这些对象直接放入场景中并将其命名为。

答案 1 :(得分:0)

看起来场景图的一个主要功能是促进对象的分组,所以这种行为对我来说很奇怪,我在r71中得到了相同的异常。

使用THREE.Group代替THREE.Object3D为我修复了错误。

通过代码挖掘,我发现了一些名为THREE.Group的无证文档,它继承自THREE.Object3D。团体似乎不参加视锥检查,但他们的孩子会这样做(这是我们想要的行为)。