【问题标题】:Why does Cesium viewer not display a model, when I add it?为什么 Cesium 查看器在我添加模型时不显示模型?
【发布时间】:2015-07-24 10:52:15
【问题描述】:

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

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

但它没有 - 我在正确的位置看到一个选择标记,但没有实际的建筑物。

方法一

我使用以下代码添加建筑物(参见文件 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;
}

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

方法二

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:当我打开页面时,有时(但并非总是)会出现以下异常(当我启用停止未捕获的异常时):

【问题讨论】:

  • 您的模型代码很好,实际上如果您将方法 1 粘贴到 Cesium Sandcastle 并修复 URL,模型会完全按预期加载。问题是代码中其他地方的错误,您只是看到它以模型未显示的形式表现出来。
  • Web 控制台中是否出现任何错误? (F12,控制台选项卡)
  • @emackey 是的。请参阅我的更新 1。

标签: javascript java angularjs spring-boot cesium


【解决方案1】:

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

【讨论】:

  • 谢谢。这解决了我的问题。我会尽快将赏金奖励给你(SO 说在 16 小时内)。
猜你喜欢
  • 2019-07-11
  • 2022-07-20
  • 1970-01-01
  • 2022-07-26
  • 2022-11-19
  • 1970-01-01
  • 2019-07-02
  • 2023-01-20
  • 2021-08-25
相关资源
最近更新 更多