Установка положения камеры после смены сцен

В приложении Cesium Sandcastle я отредактировал учебное пособие по камере, чтобы включить приведенный ниже фрагмент кода:

window.scene = scene;
scene.morphComplete.addEventListener(function (){
    console.log('Morph completed...');
    var west = Cesium.Math.toRadians(10);
    var east = Cesium.Math.toRadians(40);
    var south = Cesium.Math.toRadians(35);
    var north = Cesium.Math.toRadians(45);
    var rectangle = new Cesium.Rectangle(west,south,east,north);    
    window.scene.camera.viewRectangle(rectangle);
    console.log('Camera view rectangle updated...');    
});

Приведенный выше код привязывается к событию morph complete, и как только переход сцены завершается, прямоугольник вида устанавливается в регион Европы. По крайней мере, это мое ожидаемое поведение. Наблюдаемое поведение после того, как морф завершен, прямоугольник с цезиевым обзором находится за границей. У меня вопрос, как я могу установить прямоугольник вида карты после перехода сцены?

1 ответ

Решение

Похоже, это ошибка в работе с камерой, очевидно, мы установили камеру в последний раз после срабатывания morphComplete событие.

Вы можете обойти эту проблему, подождав, пока пройдет один кадр анимации, прежде чем самостоятельно управлять камерой. Например:

scene.morphComplete.addEventListener(function (){
    Cesium.requestAnimationFrame(function() {   // This is the workaround.
        console.log('Morph completed...');
        var west = Cesium.Math.toRadians(10);
        var east = Cesium.Math.toRadians(40);
        var south = Cesium.Math.toRadians(35);
        var north = Cesium.Math.toRadians(45);
        var rectangle = new Cesium.Rectangle(west,south,east,north);
        window.scene.camera.viewRectangle(rectangle);
        console.log('Camera view rectangle updated...');
    });
});

Я только что подал номер 2203 для этого.

Другие вопросы по тегам