0

认为它更多的javascript语法问题然后是three.js,但仍然......我有一个对象“o = {}”,其纹理存储如下

o = {
    ...
    textures: {
        one: {  
            low: { t: new THREE.Texture(), url: 'http://i.imgur.com/tJ0uJPt.jpg' },
            normal: { t: new THREE.Texture(), url: 'http://i.imgur.com/wBB1nZN.jpg' }
        },
        two: {  
            low: { t: new THREE.Texture(), url: 'http://i.imgur.com/9JaoZNA.jpg' },
            normal: { t: new THREE.Texture(), url: 'http://i.imgur.com/p9wO18t.jpg' }
            hd: ...
            etc..
        }

        etc..
    }
    ...
}

我需要的是一个可以使用 THREE.ImageLoader 加载所有这些纹理的函数。此外,当加载所有纹理时,我想运行 o.texturesOnLoad(); 功能。

这就是我现在拥有的http://jsfiddle.net/NEXny/5/ 但只有 o.textures 的最后一个纹理正在工作..认为我以错误的方式将变量传递给 loader.load( ... );

希望有人能帮助我,谢谢。

4

1 回答 1

0

我通过将 loader.load(...) 包装在自执行函数中找到了解决方案。

(function(obj, texture) {
    if (current == total) {
        // last texture
        loader.load( texture.url, function (image){
            texture.t.image = image;
            texture.t.needsUpdate = true;

            obj.texturesOnLoad();
        });
    } else {
        loader.load( texture.url, function (image){
            texture.t.image = image;
            texture.t.needsUpdate = true;
        });
    }
})(this, this.textures[texture][quality]);

http://jsfiddle.net/NEXny/6/

于 2013-09-25T13:32:58.860 回答