正如 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;
看起来错误发生在这里:
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包含的内容。一旦你解决了这个问题,如果你仍然有问题,回来问更多问题!
| 归档时间: |
|
| 查看次数: |
1177 次 |
| 最近记录: |