2015-12-01 35 views
1

在銫我加入3dmodel爲如下(網址是什麼,但.gltf文件的路徑)我怎樣才能得到模型加載事件銫觀衆

function load3dmodel(url, x, y) { 
    viewer.entities.removeAll(); 
    viewer.entities.add({ 
     position: Cesium.Cartesian3.fromDegrees(x, y), model: { 
      uri: url 
     } 
    }); 
} 

它正在30至60秒LAOD cesium查看器中的gltf文件,所以我想在加載3dmodel時顯示處理Gif圖像。爲了實現這一點,我無法找到3dmodel加載事件。我的意思是實際裝載完成。 在函數結束後,我嘗試使用「then」子句。它不起作用

回答

2

目前,沒有官方的方法來做到這一點。實體API層故意隱藏其下面的圖形原語層,以防止抽象漏洞。未來版本的Cesium應該將Model.readyModel.readyPromise暴露給實體API,但目前尚未實現。

我花了一分鐘的時間來看看在Cesium版本1.15中挖掘出Model原語需要什麼。找到這個的代碼非常難看,它使用「私有」(前綴爲_)變量,這些變量沒有記錄,並且可能會在沒有警告的情況下更改。所以這不是一個長期的解決方案,並且可能不適用於各個版本。

function load3dmodel(url, x, y) { 
    viewer.entities.removeAll(); 
    var entity = viewer.entities.add({ 
     position: Cesium.Cartesian3.fromDegrees(x, y), model: { 
      uri: url 
     } 
    }); 

    // Use of _private variables is undocumented, subject to change without notice. 
    // Do not use this code in production. 
    Cesium.requestAnimationFrame(function() { 
     viewer.dataSourceDisplay.defaultDataSource._visualizers.reduce(function(a,b) { 
      return (a instanceof Cesium.ModelVisualizer) ? a : b; } 
     )._modelHash[entity.id].modelPrimitive.readyPromise.then(function() { 
      console.log('Your model has loaded.'); 
     }); 
    }); 
} 
+0

謝謝emackey,但這是行不通的,我越來越Uncaught TypeError:無法讀取未定義的屬性'_visualizers'。你可以請檢查一下,讓我知道。 – ChanduRaj

+0

我正在使用Cesium-1.15版本。你能否發送與相同版本兼容的解決方案?謝謝 – ChanduRaj

+0

編輯我的答案,目標是銫1.15。 – emackey