Как загрузить трехмерные модели с указанием содержимого файла, а не пути в файле Three.js?

Я хочу создать онлайн-просмотрщик, где пользователь может загружать модели и просматривать их, а не редактировать путь в исходном коде. Так как браузеры не позволяют получить путь к файлу, но я могу прочитать содержимое файла, как мне загрузить модель (obj, ply, mtl и т. Д.) С учетом содержимого файла?

3 ответа

Есть несколько способов сделать это, но если вы зайдете в репозиторий github three.js, в примерах вы увидите загрузчик obj. Есть примеры с MTL, STL, Collada и т. Д.

http://threejs.org/examples/webgl_loader_obj.html

В репозитории есть папка примеров, в которой есть папка js со всеми загрузчиками примеров:

https://github.com/mrdoob/three.js/tree/master/examples/js/loaders

Если вы хотите уничтожить внутренние три загрузчика, каждый пример загрузчика имеет метод синтаксического анализа (текст).

Вы можете использовать API для чтения файлов HTML5, а затем вызвать метод parse из соответствующего загрузчика непосредственно с результатом.

Или вы можете использовать программу чтения файлов, прочитать файл в URL-адрес данных и загрузить URL-адрес данных вместо обычного URL-адреса.

HTML-код, позволяющий пользователю загрузить файл модели

<h1>Model File Reader</h1>
<div>
  Select a model file: 
  <input type="file" id="fileInput">
</div>

Код Javascript для обработки события onload:

window.onload = function() {
    var fileInput = document.getElementById('fileInput');

    fileInput.addEventListener('change', function(e) {

      // file selection is done you can now read the file
      var file = this.files[0];

      // set your file encoding
      var encoding = 'ISO-8859-1'; 

      // create a file reader
      var reader = new FileReader();

      // set on load handler for reader
      reader.onload = function(e) {
          var result = reader.result;

          // parse using your corresponding loader
          loader.parse( result );
      }

      // read the file as text using the reader
      reader.readAsText(file, encoding);

    });
}

Проверьте здесь для получения дополнительной информации о классе чтения файлов

Хорошо, только что узнал, что онлайн-редактор three.js делает это http://threejs.org/editor/.

Файл -> Импорт.

Другие вопросы по тегам