2016-07-15 174 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