2016-07-15 9 views
0

ライブラリーに付属している適切なローダーを使用して非常に大きなファイルを読み込もうとすると、自分のウェブサイトのタブがクラッシュします。私はWorkerクラスを実装しようとしましたが、うまくいきません。相続人は何が起こる:メインのJavaScriptファイルでThree.js large modelsをロードする

私が持っている:

ユーザーが選択
var worker = new Worker('loader.js'); 

私は拡張子をチェックし、労働者へのファイルのURL /パスを渡し可能なモデルの1:この例では(

importScripts('js/libs/three.js/three.js'); 
importScripts('js/libs/three.js/PCDLoader.js'); 
:PCDファイル)

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

loader.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で非常に大きな配列につながる3つのオブジェクト。非常に大きなモデルを複数のファイルに分割して、これらのポイント、ノーマル、マテリアルインデックス、UVおよびフェイスアレイを配布すると、モデルの大きさに応じて役立ちます。また、bufferGeometryを使用すると、実行時のパフォーマンスが向上する可能性があります。http://threejs.org/docs/api/core/BufferGeometry.htmlを参照してください。 – Radio

+0

@Alexus Chrome、Opera、Firefox、およびIEを試しました。 IE以外のすべてのエラーは非常に有用ではありません(サイトが壊れた、ああ、スナップなど)。 IEはただ凍結します。 – VID44R

答えて

0

現在、Three.jsのローダーは、ファイルのデータを解析するために文字列と文字列を使用しています。彼らはファイルを分割していないので、ブラウザーがすぐに中断する過度のメモリー使用量につながります。ロード中に使用された1 GB以上のメモリに64 MBのファイルを読み込むと、エラーが発生します。

+0

自動エッジまたは頂点の自動補完のために破損したジオメトリを引き起こさずにJSファイルを安全に分割する方法をJSが提案しますか? – Radio