Как я могу загрузить файл текстуры в MTL загрузчик по одному - PullRequest
0 голосов
/ 27 марта 2019

Я работаю над созданием веб-сайта, чтобы пользователи могли загружать свои 3d-модели.И они это видят.Когда я загружаю obj-mtl-texture, мне нужно использовать URL-адрес blob.У меня есть все текстуры BLOB-URL один раз один, но у меня нет родительского URL.Я хочу загрузить текстуры в загрузчик MTL, как я могу сделать это без setTexturePath () func.

Я пытаюсь экспортировать модель obj в gltf из three.js.

mtlLoader.setTexturePath(URL.createObjectURL(textureFolder));
    mtlLoader.load(URL.createObjectURL(mtlFile), (materials) => {
      materials.preload();
      objLoader.setMaterials(materials);
      objLoader.load(URL.createObjectURL(objFile),
        // called when resource is loaded
        (object) => {
          scene.add(object);
          exporter.parse(scene, (gltf) => {
            console.log(gltf);
            gltfFile = gltf2file(gltf, file.name);
            resolve(gltfFile);
          });
        },
        // called when loading is in progresses
        (xhr) => {
          console.log(`${(xhr.loaded / xhr.total) * 100}% loaded`);
        },
        // called when loading has errors
        (error) => {
          console.log(error);
          reject(new Error('Error occurred when converting file to gltf'));
        });
    },
    // called when loading is in progresses
    (xhr) => {
      console.log(`${(xhr.loaded / xhr.total) * 100}% loaded`);
    },
    // called when loading has errors
    (error) => {
      console.log('mtl error');
      console.log(error);
      reject(new Error('Error occurred when converting file to gltf'));
    });
  });

Есть ли кто-нибудьможете показать мне способ загрузки текстур по одному без использования setTexturePath ()

спасибо в адвенсе

1 Ответ

0 голосов
/ 07 апреля 2019

Я решил проблему с настройкой CustomManager для загрузки MTLLoader

Пример кода здесь

const loadingManagerMTL = new THREE.LoadingManager();
  loadingManagerMTL.setURLModifier((url) => {
    let newUrl;
    for (let i = 0; i < textureFolder.files.length; i++) {
      if (url === textureFolder.files[i].name) {
        newUrl = URL.createObjectURL(textureFolder.files[i]);
      }
    }
    return newUrl;
  });

  const mtlLoader = new MTLLoader(loadingManagerMTL);

Теперь вы можете настроить свой менеджер загрузки по своему усмотрению ...

Вы можете использовать менеджер загрузки для других загрузчиков, чтобы любить OBJLoader

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...