three.js - object.updateWorldMatrix 不是函数

标签 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

我的目标是将加载的 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);

郑重声明,我使用的是 Three.js 的最新版本,它是 0.110.0

最佳答案

看起来错误发生在这里:

const box = new THREE.Box3().setFromObject(object);

object 是调用 GLTFLoader.load 返回的对象。 .

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

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

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

关于three.js - object.updateWorldMatrix 不是函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59075004/

相关文章:

three.js - Three.js png纹理-Alpha渲染为白色而不是透明

javascript - 三个js PERFORMANCE如何让使用图像纹理更快

javascript - ThreeJS Maya 之类的线框实现

javascript - Three.js Dom事件(linkify.js)

javascript - WebGL:如何通过矢量缩放对象,或生成此结果(包括图像)

javascript - 如何创建具有宽度和厚度的 Three.js 3D 线系列?

javascript - 无法将从 Blender 导出的对象加载到 Three.js 中?

javascript - Three.js 光线转换不适用于移动物体

three.js - 使用粗糙度为 0 的 GLTF 导出的立方体原则上的 BSDF Material 在 Three.js 中无法正确显示

css - ThreeJS Size Canvas 填充空间