2013-12-20 8 views
5

AlteredQualiaのスキニングの例に基づいてJSONモデルが正常に読み込まれています。しかし、読み込みが完了するまでモデルを公開しません。この例でわかるように、モデルは最初に表示され、その後テクスチャリソースがロードされます。Three.jsのJSONモデルからテクスチャのロードを終了する方法を教えてください。

Webページに不透明なdivを追加し、JSONloader.load()関数のコールバックを使用してdivを移動します邪魔にならないように。残念ながら、このコールバックは、メッシュがシーンに追加されたときにトリガされます。このメッシュは、スキニングされたイメージによってまだブロックされていないように見えるので、不完全なシーンを「公開」します。

これを修正するにはどうすればよいですか?私は、コールバック関数を持つ関数THREE.ImageUtils.loadTextureは、()があることを見てきましたが、それはメッシュがそうのように宣言と定義されている。このユースケースに関与していないようです:

var mesh = new THREE.SkinnedMesh(geometry,new THREE.MeshFaceMaterial(materials)); 
//geometry and materials are both parameters of jsonloader.load callback 

I MeshFaceMaterialとSkinnedMeshのソースコードを見ていましたが、そこに解決策が見当たりませんでした。

ありがとうございました。

答えて

3

これは現在適切に分類されていません。現時点では、すべてがロードされたときにコールバックやイベントが送信されません。/

+0

は、回避策はありますか?おそらく材料のためのjsonファイルをスキャンし、それらをキャッシュするために各画像ファイルのための独立したテクスチャを作成するでしょうか? – Brian

+0

それはうまくいくように聞こえます。うん – mrdoob

+0

こんにちは、まあ、そうではありません!私は最初にloadTextureを使ってそれらをロードしましたが、それでもJSONloaderはキャッシュから取り出すのではなく画像ファイルを取り出しました(chromeとfirefoxでテスト済み)。 [ネットワークモニタのスクリーンショット](http://i1.minus.com/ilgSSsQABEyYJ.png) また、[window.onload]を使用して試しました(http://stackoverflow.com/questions/7919516/using-textures-in- 3-js/10983908#10983908)、そのイベントは一度だけトリガーされます。 – Brian

2

これは少しハックですが、3行目の10362(リビジョン61)ではimage.onload = function()が表示されます.Loaderプロトタイプ)。私はJSONモデルから読み込まれたテクスチャのコールバック関数であることを追跡しました。

その関数内に独自のコールバックを追加すると、テクスチャの読み込みを追跡できます。

私は前にも述べたように、これは解凍ではなく、解答ではありません。非常にライブラリコードを慎重に変更してください。あなたが壊れていることを知らないものを壊すかもしれません。

+0

提案をお寄せいただきありがとうございます。初心者の方が多すぎてソースコードを変更しようとしていません。 – Brian

1

これはばかげたばかげたチートですが、ハックとして機能します。画像読み込みを実現する必要があることと、それ以外は少なくとも別々に実現する必要があることに同意します。画像を必要としないものは、小さな電子親指をつぶすことではありません。最適化がない場合はそれが言った、あなたの問題......

var texture = THREE.ImageUtils.loadTexture(url); 
 
while (texture.image.width == 0);

+0

これは動作する可能性がありますが、動作することは保証されていません。効果的に、ブラウザは、あなたのJavaScriptが現在のイベントを終了するまで、何もしないことになっています。あなたがスピンして待っているという事実は、あなたがイベントを終了したことがないことを意味します。基本的には、あなたがテストしたブラウザ/バージョンが完全にフリーズしていなくても、それは幸運なことです。さらに、接続が遅い場合にフリーズしなくても、ブラウザーはJavaScriptの処理に長時間かかる可能性があります。また、スピン待ちの間にユーザーのマシンをDoSします。 – gman

+0

これは私のために "忙しい待っている"のように見えます...。このようにしないでください...。 – Trantor

関連する問題