three.js控制台错误“scene.getObjectByName(...)未定义”但一切似乎都没问题?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了three.js控制台错误“scene.getObjectByName(...)未定义”但一切似乎都没问题?相关的知识,希望对你有一定的参考价值。

我收到控制台错误:

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,因为您在将茶壶对象添加到场景之前调用它。调用内部加载回调,因此您将获得茶壶对象,然后向其添加旋转。

以上是关于three.js控制台错误“scene.getObjectByName(...)未定义”但一切似乎都没问题?的主要内容,如果未能解决你的问题,请参考以下文章

Three.js 不渲染纹理

如何在three.js中导入json和渲染

Three.js-仅渲染场景背景,但不渲染几何图形

Three.js FBX 二进制格式不支持

Three.js 全屏问题

three.js pov 相机环顾四周的错误