2016-07-15 176 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 THREE对象中的非常大的数组。根据模型的大小,通过将非常大的模型分解为多个文件,在许多模型中分配这些点,正常,材质索引,UV和面阵列可能会有所帮助。此外,使用bufferGeometry还可以提高运行时性能:请参阅http://threejs.org/docs/api/core/BufferGeometry.html – Radio

+0

@Alexus我尝试了Chrome,Opera,Firefox和IE。除IE以外的所有内容都给出了一个非常无用的错误(网站崩溃,哦,快速等)。 IE只是冻结。 – VID44R

回答

0

目前Three.js的加载器依赖于字符串和字符串数组来解析来自文件的数据。他们不会将文件拆分成片段,这会导致浏览器立即中断内存使用。加载64 MB文件尖峰到加载过程中使用的超过1 GB内存(然后导致错误)。

+0

你如何建议JS发现安全拆分3d文件的位置,而不会由于自动边缘或顶点自动完成而导致损坏的几何体? – Radio