【问题标题】:how fix this error:Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'length')如何修复此错误:未捕获(承诺)类型错误:无法读取未定义的属性(读取“长度”)
【发布时间】:2022-01-05 12:40:25
【问题描述】:

我正在创建一个加载 gltf 3d 模型的网站。我想使用循环加载更多模型。

const loader = new GLTFLoader()
//.setPath( 'models/gltf/DamagedHelmet/glTF/' );
      .setPath( 'resources/' );
const resourceData = ["Learning Bee1","Learning Bee2","Learning Bee3"];
//const l = resourceData.length;

for(let i=0; i<resourceData.length;i++){
    let oResource = resourceData[i];
    let sModelName = oResource + ".gltf";
    loader.load( sModelName, function ( gltf ) {

        gltf.scene.traverse( function ( child ) {

            if ( child.isMesh ) {

                roughnessMipmapper.generateMipmaps( child.material );

            }

        });
    });

    scene.add( gltf.scene );

    roughnessMipmapper.dispose();

    render();

}

});

当我运行这个时,显示如下错误。如何解决这个问题?

three.module.js:38723 Uncaught (in promise) TypeError: Cannot read properties of undefined (reading 'length') 在三个.module.js:38723

【问题讨论】:

  • 查看代码,如果你会正确缩进,你会发现scene.add( gltf.scene ); 在定义gltf 的代码之外。

标签: javascript loops three.js gltf variable-length-array


【解决方案1】:

你的代码缩进有点草率,它会让你犯下可以通过更简洁的代码避免的错误。

  1. 您在括号外调用gltf.scene,但它不存在:
loader.load( sModelName, function ( gltf ) {
    // gltf exists here
});

// gltf does not exist here
scene.add( gltf.scene );
  1. 您在使用roughnessMipmapper 之前将其丢弃。请记住,加载器中的回调函数需要一些时间才能执行,因为它正在等待完成加载您的资产。
loader.load( sModelName, function ( gltf ) {
    // 2. This happens later, after assets load
    roughnessMipmapper.generateMipmaps( child.material );
});

// 1. This gets called first
roughnessMipmapper.dispose();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 2021-05-13
    • 2023-03-31
    • 2022-01-13
    相关资源
    最近更新 更多