2017-01-19 2 views
-2

Я пытаюсь использовать обещания для загрузки текстур в THREE.JS, но я не знаю, как это сделать. Я видел, как они работают, но есть ли какой-нибудь пример? Я пытаюсь загрузить рис (img.png) в кубической сетке.THREE.js Добавить текстуры с обещаниями

Я не хочу использовать JSON.

+2

Возможный дубликат [? есть ли способ ждать THREE.TextureLoader.load(), чтобы закончить] (http://stackoverflow.com/questions/33283386/is-there-a-way -to-wait-for-three-textureloader-load-to-finish) – Leeft

ответ

1

Это исходный код THREE.ImageUtils.loadTexture из three.js:

THREE.ImageUtils = { 

    crossOrigin: undefined, 

    loadTexture: function (url, mapping, onLoad, onError) { 

    var loader = new THREE.ImageLoader(); 
    loader.crossOrigin = this.crossOrigin; 

    var texture = new THREE.Texture(undefined, mapping); 

    loader.load(url, function (image) { 

     texture.image = image; 
     texture.needsUpdate = true; 

     if (onLoad) onLoad(texture); 

    }, undefined, function (event) { 

     if (onError) onError(event); 

    }); 

    texture.sourceFile = url; 

    return texture; 

    }, 

Таким образом, вы можете просто обернуть, что в пользовательской функции, которая возвращает Promise (это синтаксис ES6):

loadTextureAsync (url, mapping) { 

    return new Promise ((resolve, reject) => { 

    const onLoad = (texture) => resolve (texture) 

    const onError = (event) => reject (event) 

    THREE.ImageUtils.loadTexture(
     url, mapping, onLoad, onError) 
    }) 
} 
+0

спасибо! : D Это работает – Pedro