Как textureLoader.load для более чем 1 текстуры и присвоения имен карт каждой текстуре? - PullRequest
0 голосов
/ 29 марта 2019

Как я могу вызвать textureLoader.load только один раз и назначить имя карты каждой текстуре, чтобы я мог вызывать создание материала после загрузки всех текстур?

В противном случае я не могу контролировать, когда создавать материал и правильно назначать текстуры.

Я работаю с obj без загрузки mtl.

Спасибо за вашу помощь

Это код, который я прошу заменить для одной функции textureLoader.load

var textureLoader = new THREE.TextureLoader(manager);

var albedoM = textureLoader.load( "vaseTextures/albedo.png", onLoad, onProgress, onError );

var normalMap = textureLoader.load( "vaseTextures/normal.png", onLoad, onProgress, onError );

var aoMap = textureLoader.load( "vaseTextures/cavity.png", onLoad, onProgress, onError );   

Expected result: I call once function onLoad( texture) after the textures are loaded and saving a name for each texture, and so that I can then create one material that holds each texture and assign the textures to it.

1 Ответ

1 голос
/ 29 марта 2019

В этом случае лучше использовать onLoad() обратный вызов THREE.LoadingManager . Это будет выполнено, как только все ресурсы будут загружены. Поскольку вы уже передаете экземпляр THREE.LoadingManager в загрузчик текстур, вам просто нужно реализовать onLoad(). Например, вот так:

manager.onLoad = function ( ) {

    const material = new THREE.MeshPhongMaterial();
    material.map = albedoM;
    material.normalMap = normalMap;
    material.aoMap = aoMap;

    // do something with your material

};

three.js R103

...