如何在cesium v​​iewer中

时间:2015-12-01 12:36:48

标签: cesium gltf

在cesium中我添加3dmodel如下(url只是.gltf文件的路径)

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

在cesium v​​iewer中填充gltf文件需要30到60秒,所以我想在加载3dmodel时显示处理Gif图像。为实现这一点,我无法找到3dmodel加载事件。我的意思是实际装载完成时。 在函数结束后我尝试使用“then”子句。不能正常工作

1 个答案:

答案 0 :(得分:2)

目前,没有正式的方法可以做到这一点。 Entity API层故意隐藏其下方的图形基元层,以防止漏洞抽象。 Cesium的未来版本应将Model.readyModel.readyPromise公开给Entity API,但目前尚未实现。

我确实花了一分钟时间来了解在Cesium 1.15版本中删除Model原语所需的内容。找到这个的代码非常难看,它使用" private" (带有_前缀)变量,这些变量是未记录的,可能会在没有警告的情况下发生变化。因此,这不是一个长期解决方案,可能无法跨版本使用。

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.');
        });
    });
}