2016-08-04 12 views
1

次のloadmodel関数を使用してjsonをhtmlにロードしています。three.jsを使用して複数のJSONをロードできません

(function init(){ 

    console.log("Init") 
    loadmodel('object1'); 
    loadmodel('object2'); 
    loadmodel('object3'); 
    loadmodel('object4'); 

    requestAnimationFrame(rotate); 
})(); 

function loadmodel(str){ 


    var json = "{% static 'three/' %}" + str + '.json.gz'; 
    var loader = new THREE.JSONLoader(); 
    loader.load(json, function(geometry, materials){ 

      alfaromeo = new THREE.Mesh(
      geometry, new THREE.MeshFaceMaterial(materials) 
     ); 
    alfaromeo.name = str; 
    names.push(str); 
    scene.add(alfaromeo); 
    }); 
} 

(jsonsはブレンダーから輸出された)私の問題は、私はロードするために、複数のJSONを持っていると私はそれぞれのJSONのために、この関数を呼び出すとき、最初のものだけが読み込まなっていると、他の人ではないということです。私の友人のコンピュータでも同じコードがうまくいきます。すべてのjsonsがうまく読み込まれています。

紛失しているものはありますか?

+0

で働いていました。底部にobject1を配置すると作業しました。しかし、object1が最上部にあるときになぜそれがうまくいかないかを知りたいのですが –

+0

レンダリングサイクルが表示されません。連続してシーンをレンダリングしていますか?単一のレンダリングのためにオブジェクトが時間内に読み込まれなかった可能性があります。また、順序を逆にするとオブジェクト4または何かの時間が増えます。 –

+0

私は連続してレンダリングしません。私は一度だけレンダリングしています。 –

答えて

0

JSONLoaderは非同期ですので、既にダウンロード済みのものをレンダリングする最良の方法は、onLoad methodでJSONファイルをダウンロードした後にレンダリングをトリガーすることです。

実際に私がお勧めするのは、loadmodelを呼び出して1つのJSONファイルをロードすることです。最初のダウンロードトリガーの後にもう一度新しいダウンロードが行われた後、最後のJSONファイルダウンロードがシーンレンダリングをトリガーします。あなたのコードから

(function init(){ 

console.log("Init") 
loadmodel('object1'); 
//this should be called when your last object has been added to the scene 
//requestAnimationFrame(rotate); 
})(); 

だけで簡単にnは汚い例:実際の順序を変更する

function loadmodel(str) 
{ 
    var json = "{% static 'three/' %}" + str + '.json.gz'; 
    var loader = new THREE.JSONLoader(); 
    loader.load(json, function(geometry, materials){ 

     alfaromeo = new THREE.Mesh(
     geometry, new THREE.MeshFaceMaterial(materials)); 

     alfaromeo.name = str; 
     names.push(str); 
     scene.add(alfaromeo); 

     // Add here proper logic to load next model... 
     if(str=="object1") 
      loadmodel("object2"); 
     else if()... 
     else 
     { 
      console.info("done with all downloads!"); 
      requestAnimationFrame(rotate); 
     } 

    }); 
} 
関連する問題