如何修复 OBJLoader 上的 "THREE.Object3D.add: object not an instance of THREE.Object3D." 错误

how to fix "THREE.Object3D.add: object not an instance of THREE.Object3D." error on OBJLoader

我正在尝试在我的 VR 场景中添加控制器,按照这个例子“https://threejsfundamentals.org/threejs/lessons/threejs-webvr-point-to-select.html”。我想用我找到的 OBJ 模型替换线指针,但它似乎由于某种原因一直在加载或者什么都不加载。

 ...
 var gun = new OBJLoader();
 gun.load('models/CA-87.obj');

 this.controllers = [];
  ...
 for (let i = 0; i < 2; ++i) {
 const controller = renderer.vr.getController(i);
 //controller.addEventListener('select', selectListener);
 //controller.addEventListener('selectstart', selectListener);
 //controller.addEventListener('selectend', endListener); 
 scene.add(controller);

 controller.add(gun);

 this.controllers.push({controller, gun});
                  }
 ...

我得到的错误是这些 "THREE.Object3D.add: object not an instance of THREE.Object3D. > Object { manager: {…}, materials: null }"。我希望看到场景中的模型并跟随我使用的实际 vive 控制器的移动,但它们不会出现。

gun 是对象加载器,不是对象。每个 the docs OBJLoader 在回调中传递一个 Object3D。所以...

let loader = new OBJLoader();
loader.load('models/CA-87.obj', gun => {
  // ...
  controller.add(gun);
  // ...
});