我收到控制台错误:

TypeError: scene.getObjectByName(...) is undefined


在这两行上:

scene.getObjectByName('teapot').rotation.x += 0.005;
scene.getObjectByName('teapot').rotation.y += 0.005;


我在其中加载对象的相关代码如下所示:

var loader = new THREE.OBJLoader();
loader.load('obj/teapot.obj', function(object) {

  object.traverse(function(child) {
    if (child instanceof THREE.Mesh) {
      child.material = phongMaterial;
    }
  });

  object.scale.x = 2;
  object.scale.y = 2;
  object.scale.z = 2;
  object.name = 'teapot';

  scene.add( object );
 });


场景本身只是一个旋转的简单茶壶,据我所知,一切都在渲染和表现。

我只是想知道为什么会出错?

最佳答案

var loader = new THREE.OBJLoader();
loader.load('obj/teapot.obj', function(object) {

  object.traverse(function(child) {
    if (child instanceof THREE.Mesh) {
      child.material = phongMaterial;
    }
  });

  object.scale.x = 2;
  object.scale.y = 2;
  object.scale.z = 2;
  object.name = 'teapot';

  scene.add(object);
  scene.getObjectByName('teapot').rotation.x += 0.005;
  scene.getObjectByName('teapot').rotation.y += 0.005;
});


之所以得到scene.getObjectByName('teapot') == undefined,是因为您是在将茶壶对象添加到场景之前调用它的。在内部加载回调中调用该方法,这样您将获得茶壶对象,然后对其添加旋转。

08-26 05:10