【问题标题】:Updating Cesium Callback Property causes the entity to flash更新 Cesium 回调属性会导致实体闪烁
【发布时间】:2016-04-20 14:53:15
【问题描述】:

这是一些可以粘贴到铯沙堡的代码。

它将一个实体添加到地图中,然后每秒更新一次位置属性的 CallbackProperty。每次更新时,实体都会闪烁。

var viewer = new Cesium.Viewer('cesiumContainer');
var position = new Cesium.Cartesian3.fromDegrees(-114.0, 40.0, 300000.0);
var constant = false;
var blueBox = viewer.entities.add({
    name : 'Blue box',
    position: new Cesium.CallbackProperty(getPos, constant),
    box : {
        dimensions : new Cesium.Cartesian3(400000.0, 300000.0, 500000.0),
        material : Cesium.Color.BLUE
    }
});

function getPos() {
    return position;
}

function setPosCallback() {
    constant = !constant;
    blueBox.position.setCallback(getPos, constant);
}

setInterval(setPosCallback, 1000);

有没有办法在不导致实体闪烁的情况下更新此类属性?也许使用 requestAnimationFrame 之类的?

我需要使用回调属性来绘制形状,但是一旦绘制出来,我希望它们使用常量属性。我也尝试过更改 isConstant 属性,但它是只读的。

【问题讨论】:

  • 删除了我的答案,因为我确实误读了你的问题 - 你有没有弄清楚?
  • @bradimus 不,还没有。用常量替换 CallbackPropertys 显着提高了我的应用程序的性能,但在更改过程中会快速闪烁。

标签: javascript cesium


【解决方案1】:

我意识到这个问题来自很久以前,但看起来问题出在“constant = !constant;”这一行。只需删除它即可解决闪烁问题。

编辑:我误解了这个问题,在常量和回调之间切换时我也有闪烁问题。

【讨论】:

  • 感谢您的回复,但不幸的是,这并不是真正的答案。这里的代码 sn-p 是为了表明将渲染的形状从恒定更改为非恒定会导致闪烁。目标是在用户绘制形状时使用常量 false,之后使用常量 true 来提高性能。
  • @Zac 哎呀,对不起!另外,我在上面的 cmets 中看到您在常量和回调之间切换以提高性能。这也是我正在做的事情,我也得到了闪光灯。也许没有办法解决! Cesium 的 API 和文档非常糟糕。
【解决方案2】:
var viewer = new Cesium.Viewer('cesiumContainer');
var position = new Cesium.Cartesian3.fromDegrees(-114.0, 40.0, 300000.0);
var constant = true;
var blueBox = viewer.entities.add({
    name : 'Blue box',
    position: new Cesium.CallbackProperty(getPos, constant),
    box : {
        dimensions : new Cesium.Cartesian3(400000.0, 300000.0, 500000.0),
        material : Cesium.Color.BLUE
    }
});

var count = -114.0;
function getPos() {
count+=0.2;
    return new Cesium.Cartesian3.fromDegrees(count, 40.0, 300000.0);
}

function setPosCallback() {
    constant = !constant;
    blueBox.position.setCallback(getPos.bind(blueBox), true);
}

setInterval(setPosCallback, 1000);

嗨,盒子正在移动,当我将回调函数绑定到实体并保持常量 = true 时,它​​没有在我的浏览器中闪烁。

您可能想再试一次。干杯

【讨论】:

  • 我正在寻找使用常量 = false 的性能优势,在此示例中更改回调没有意义。
  • 这个答案完全没用,因为它没有解释它是什么以及它如何解决问题(如果有的话)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-08-25
  • 2010-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多