当我添加它时,为什么Cesium v​​iewer不显示模型?

时间:2015-07-24 10:52:15

标签: javascript java angularjs spring-boot cesium

我有一个应用程序,它显示城市的3D地图和“添加建筑物”按钮。

当用户按下该按钮时,必须将建筑物的模型插入地图中。

但事实并非如此 - 我在正确的地方看到了一个选择标记,但没有真正的建筑物。

方法1

我使用以下代码添加建筑物(参见文件src\main\resources\static\js\myapp.js源代码):

function addBuilding() {
  var position = Cesium.Cartesian3.fromDegrees(132.159633, 43.350116, 0.);
  createModel('/models/CesiumAir/Cesium_Air.gltf', position);
}

function createModel(url, position) {
    var heading = Cesium.Math.toRadians(135);
    var pitch = 0;
    var roll = 0;
    var orientation = Cesium.Transforms.headingPitchRollQuaternion(
        position, heading, pitch, roll);

    var entity = viewer.entities.add({
        name : url,
        position : position,
        orientation : orientation,
        model : {
            uri : url,
            minimumPixelSize : 128
        }
    });
    console.log("entity.model = " + entity.model);
    viewer.selectedEntity = entity;
}

这不起作用,所以我尝试了另一种方法。

方法2

var scene = viewer.scene;
var modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame(
    Cesium.Cartesian3.fromDegrees(132.159633, 43.350116, 0.0));
var primitive = Cesium.Model.fromGltf({
                      url : '/models/CesiumAir/Cesium_Air.gltf',
                      modelMatrix : modelMatrix,
                      minimumPixelSize : 128,
                      appearance : new Cesium.DebugAppearance({
                          attributeName : 'normal'
                        })
                  });
scene.primitives.add(primitive);

这也不起作用。

如果我在浏览器中打开URL http://localhost:8080/models/CesiumAir/Cesium_Air.gltf,我可以看到一些JSON输出,因此链接断开不是原因。

我很感激,如果你告诉我,我必须在我的程序中修改,以增加建筑物的工作量。源代码和构建说明可用here。该应用程序使用AngularJS,可能是Cesium和Angular以某种方式干扰。

video显示了如何重现此错误。

更新1:当我打开页面时,我有时(但并非总是)获得以下异常(当我启用对未捕获的异常停止时):

Error

1 个答案:

答案 0 :(得分:3)

在myapp.js中创建查看器时,请将Cesium.SceneMode.COLUMBUS_VIEW更改为Cesium.SceneMode.SCENE3DModel rendering is currently not supported outside of 3D mode