正如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/