2016-07-15 4 views
0

Когда я пытаюсь загрузить очень большой файл с помощью соответствующих загрузчиков, представленных в библиотеке, вкладка моего сайта работает в аварийных ситуациях. Я попытался реализовать класс Worker, но он, похоже, не работает. Вот что происходит:Three.js погрузка больших моделей

В главном файла JavaScript У меня есть:

var worker = new Worker('loader.js'); 

Когда пользователь выбирает один из доступных моделей я проверить для расширения и передать файл URL/путь к рабочему: (в данном случае PCD файл)

worker.postMessage({fileType: "pcd", file: file}); 

Теперь loader.js имеет соответствующий включает, которые необходимы, чтобы сделать его работу:

importScripts('js/libs/three.js/three.js'); 
importScripts('js/libs/three.js/PCDLoader.js'); 

и в методе onmessage он использует подходящий загрузчик в зависимости от расширения файла.

var loader = new THREE.PCDLoader(); 
loader.load(file, function (mesh) { 
    postMessage({points: mesh.geometry.attributes.position.array, colors: mesh.geometry.attributes.color.array}); 
}); 

Данные успешно передаются на главный javascript, который добавляет его в сцену. По крайней мере, для небольших файлов - большие, как я уже сказал, занимают слишком много времени, и браузер решает, что произошла ошибка. Теперь я думал, что рабочий класс должен работать асинхронно, так что тут дело?

+0

какая ошибка вы получили? Также, какой браузер вы использовали? – Alexus

+0

Я сомневаюсь, что это неправильно. Очень большие файлы моделей приводят к созданию очень больших массивов в объектах JavaScript ТРИ. Распространение этих точечных, нормальных, материальных индексов, UV и лицевых массивов среди многих моделей путем разбивки очень больших моделей на несколько файлов может помочь, в зависимости от того, насколько велики модели. Кроме того, использование bufferGeometry может также улучшить производительность во время выполнения: см. Http://threejs.org/docs/api/core/BufferGeometry.html – Radio

+0

@Alexus Я пробовал хром, опера, firefox и IE. Все, кроме IE, дают очень бесполезную ошибку (сайт разбился, oh snap, ect). IE просто зависает. – VID44R

ответ

0

В настоящее время загрузчики Three.js полагаются на строки и массивы строк для анализа данных из файла. Они не разделяют файлы на куски, что приводит к чрезмерному использованию памяти, которые браузеры немедленно прерывают. Загрузка 64-мегабайтных файлов в память объемом более 1 ГБ, используемой во время загрузки (что приводит к ошибке).

+0

Как вы предлагаете JS обнаружить, где безопасно разделить 3D-файл, не вызывая искаженной геометрии из-за автоматической автозаполнения ребер или вершин? – Radio

Смежные вопросы