Почему Cesium viewer не отображает модель, когда я ее добавляю?

У меня есть приложение, которое отображает 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, поэтому неработающая ссылка не является причиной.

Я был бы признателен, если бы вы сказали мне, что мне нужно изменить в моей программе, чтобы добавление зданий работало. Исходный код и инструкции по сборке доступны здесь. Приложение использует AngularJS, возможно Cesium и Angular как-то мешают.

В этом видео показано, как воспроизвести эту ошибку.

Обновление 1: когда я открываю страницу, я иногда (но не всегда) получаю следующее исключение (когда я разрешаю останавливать необработанные исключения):

Ошибка


person Mentiflectax    schedule 24.07.2015    source источник
comment
На самом деле код вашей модели в порядке, если вы вставите метод 1 в Cesium Sandcastle. и исправьте URL-адрес, модель загружается точно так, как ожидалось. Проблема заключается в ошибке где-то в вашем коде, и вы просто видите, что она проявляется в виде не отображаемой модели.   -  person Matthew Amato    schedule 24.07.2015
comment
Есть ли какие-либо ошибки, которые отображаются в веб-консоли? (F12, вкладка консоли)   -  person emackey    schedule 24.07.2015
comment
@emackey Да. Смотрите мое обновление 1.   -  person Mentiflectax    schedule 24.07.2015


Ответы (1)


При создании средства просмотра в myapp.js измените Cesium.SceneMode.COLUMBUS_VIEW на Cesium.SceneMode.SCENE3D. В настоящее время рендеринг модели не поддерживается вне режима 3D.

person heenenee    schedule 26.07.2015
comment
Спасибо. Это решило мою проблему. Я присужу вам награду как можно скорее (SO говорит через 16 часов). - person Mentiflectax; 26.07.2015