Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Three.js基于名称加载纹理失败_Javascript_Three.js_Closures - Fatal编程技术网

Javascript Three.js基于名称加载纹理失败

Javascript Three.js基于名称加载纹理失败,javascript,three.js,closures,Javascript,Three.js,Closures,我有一个.obj文件,我正在使用加载程序加载它。在对象文件中,我有一堆我想单独使用的网格,有点像一个包含所有内容的文件。但是,每个“对象”都有单独的纹理。当我尝试加载它时,它会尝试加载相同的纹理两次。我觉得这比3.js更像是对JavaScript的一种理解。非常感谢您的帮助 这是我目前的代码: for (var i = 0; i < object.children.length; i++) { var child = object.children[i]

我有一个.obj文件,我正在使用加载程序加载它。在对象文件中,我有一堆我想单独使用的网格,有点像一个包含所有内容的文件。但是,每个“对象”都有单独的纹理。当我尝试加载它时,它会尝试加载相同的纹理两次。我觉得这比3.js更像是对JavaScript的一种理解。非常感谢您的帮助

这是我目前的代码:

    for (var i = 0; i < object.children.length; i++)
    {
        var child = object.children[i]
        child.scale.set(15, 15, 15)
        child.position.y += 0.01
        console.log('Loading texture for: ' + child.name)
        textureLoader.load('assets/' + child.name + '.png', function(image)
        {
            console.log('Looking for: ' + child.name)
            var texture = new THREE.Texture()
            texture.image = image
            texture.needsUpdate = true
            child.material.map = texture
            console.log('Loaded texture for ' + child.name)
        })
    }
    scene.add(object)
for(变量i=0;i

最终发生的只是列表中的第一个对象最终加载。我已经验证了for循环运行了4次,每个子循环都是不同的。但是,当在textureLoader.load的回调中登录到控制台时,名称会两次显示为第一个元素

我认为您无法编写以下内容:console.log('查找:'+child.name) 因为child是在函数(image)之外定义的,它的值可能会随着调用console.log的时间而改变。见此:

因此,上面解释了为什么您会得到相同名称的重复打印输出。但这并不能解释为什么只有两份打印件。你应该得到4份打印件

如果您只获得两个console.log()输出,则意味着只有两个.png文件成功加载。因此,请确保所有4个文件都存在,或者查看是否有2个纹理文件在4个形状之间共享

如果问题仍然存在,请向我们提供您得到的确切打印输出

更新1:试试这个,告诉我你得到了什么输出

console.log('Loading texture for: ' + object.children[0].name);
textureLoader.load('assets/' + object.children[0].name + '.png', function(image) {
        console.log('Loaded texture for ' + object.children[0].name);
});
console.log('Loading texture for: ' + object.children[1].name);
textureLoader.load('assets/' + object.children[1].name + '.png', function(image) {
        console.log('Loaded texture for ' + object.children[1].name);
});
console.log('Loading texture for: ' + object.children[2].name);
textureLoader.load('assets/' + object.children[2].name + '.png', function(image) {
        console.log('Loaded texture for ' + object.children[2].name);
});
console.log('Loading texture for: ' + object.children[3].name);
textureLoader.load('assets/' + object.children[3].name + '.png', function(image) {
        console.log('Loaded texture for ' + object.children[3].name);
});

这是一个可以接受的方法吗<代码>for(var i=0;i如果文件加载失败,我还会在控制台中收到一个红色文本的通知。我确信图像就在那里,three.js能够在上面的更新1中加载itTry代码,并告诉我您得到了什么输出。