Как конвертировать OBJ / FBX в GLTF перед загрузкой в ​​сцену (с помощью Threejs)

Я пытаюсь создать веб-приложение, в котором пользователи могут загружать файлы obj / fbx и просматривать их в браузере. Я использовал OBJLoader и FBXLoader, которые предоставляет Threejs, и все работает нормально. Однако я хочу преобразовать обе эти модели в GTLF перед их загрузкой в сцену (для единообразия).

Как я могу добиться этого в threejs? Я знаю, что у threejs есть экспортер GTLF, но я не знаю, как использовать его в своих целях.


person PabloB    schedule 21.11.2019    source источник
comment
В three.js такого функционала нет. Только если вы напишете свой конвертер, но это чертовски труд. Зачем это делать, если с загрузчиками FBX и OBJ все работает нормально?   -  person prisoner849    schedule 21.11.2019
comment
Спасибо за ответ. Конечная цель - привести все форматы моделей к единому формату gltf, который затем можно легко преобразовать в форматы sfb / usdz для телефонов android и ios. Пытаясь сократить количество конвертеров, мне приходится писать в целом.   -  person PabloB    schedule 21.11.2019
comment
Вы пытаетесь разрешить пользователю загрузить файл glTF после этого? Или просто отобразить? Если только для отображения, я не думаю, что есть польза от загрузки, экспорта и повторной загрузки.   -  person Don McCurdy    schedule 21.11.2019
comment
@DonMcCurdy Просто пытаюсь отобразить это. Будет ли бесполезно иметь единый формат (в данном случае gltf) для работы? Какой формат наиболее поддается синтаксическому анализу?   -  person PabloB    schedule 22.11.2019
comment
Проблема в том, что здесь нужно преобразовать A- ›B-› C- ›B, где B - объект three.js. Если что-то не так с B в первый раз, преобразование его в glTF и обратно не исправит этого. Я бы сказал, что glTF - самая надежная отправная точка, если у вас есть выбор.   -  person Don McCurdy    schedule 22.11.2019


Ответы (1)


Это можно сделать двумя способами:

Способ 1:

  • Преобразуйте using из OBJ или FBX в glTF, используя собственные библиотеки на вашем сервере, такие как obj2gltf и fbx2gltf.
  • Загрузите файл glTF в веб-приложение.

Способ 2:

  • Загрузите OBJ или FBX с помощью OBJLoader или FBXLoader, получив THREE.Mesh или другой объект.
  • Преобразуйте этот THREE.Mesh в файл glTF с помощью GLTFExporter.
  • Загрузите файл glTF с помощью GLTFLoader, снова получив THREE.Mesh или другой объект.

Метод 1 сложнее, но может дать вам лучшие результаты преобразования, поскольку собственные библиотеки имеют доступ к FBX SDK. Метод 2 довольно прост, но я не могу придумать какой-либо пользы от этого ... Меш, который у вас будет после загрузки OBJ или FBX, будет (в лучшем случае) таким же, как Меш, который вы получите в конце. В худшем случае обращение через GLTFExporter-> GLTFLoader может вызвать проблемы с производительностью или корректностью.

person Don McCurdy    schedule 21.11.2019