object.updateWorldMatrix 不是函数

Hos*_*imi 2 three.js

正如 Three.js 的文档所说,改变相机的位置后,我们必须调用该updateProjectionMatrix()方法。我也在做同样的事情。但它给了我这样的错误:

TypeError: object.updateWorldMatrix is not a function
    at Box3.expandByObject (three.module.js:6329)
    at Box3.setFromObject (three.module.js:6233)
    at index.js:66
    at GLTFLoader.js:147
    at GLTFLoader.js:1639
Run Code Online (Sandbox Code Playgroud)

我的目标是将我加载的 GLTF 对象放在屏幕中央。这是我使用的代码:

this.gltfLoader.load("/corolla.gltf", (object) => {
            const box = new THREE.Box3().setFromObject(object);
            const size = box.getSize(new THREE.Vector3()).length();
            const center = box.getCenter(new THREE.Vector3());

            // reset OrbitControl
            this.controls.reset();

            object.position.x += (object.position.x - center.x);
            object.position.y += (object.position.y - center.y);
            object.position.z += (object.position.z - center.z);

            this.controls.maxDistance = size * 10;

            this.camera.near = size / 100;
            this.camera.far = size * 100;
            this.camera.updateProjectionMatrix();

            this.camera.position.copy(center);
            this.camera.position.x += size / 2.0;
            this.camera.position.y += size / 5.0;
            this.camera.position.z += size / 2.0;
            this.camera.lookAt(center);

            this.gltf = object.scene;
            this.scene.add(this.gltf);
        },
            this.manageLoading,
            this.gltfLoadErr);
Run Code Online (Sandbox Code Playgroud)

为了记录,我使用的是 Three.js 的最新版本,它是0.110.0;

The*_*m01 6

看起来错误发生在这里:

const box = new THREE.Box3().setFromObject(object);
Run Code Online (Sandbox Code Playgroud)

object从调用返回的对象在哪里GLTFLoader.load

根据文档,object不是Object3D(这是Box3.setFromObject预期的)。

相反,它object是一个 JSON 结构,包含有关 GLTF 数据的信息。Three.js 示例表明object.scene将是一个可渲染实体(如果存在)。

看看GLTFLoader示例的代码,这里。将其与您的实现进行比较。您还可以调试代码以准确查看object包含的内容。一旦你解决了这个问题,如果你仍然有问题,回来问更多问题!