CesiumJS-如何控制查看器的时间和刻度?

maxdownunder

我想做的是控制非实时Cesium应用程序的时钟滴答想象一下,运行着昂贵的代码,再加上我想给观众一些时间来加载切片,然后再继续。那么,如何禁用自动滴答,然后在我的代码准备就绪时手动调用tick()

Cesium.Clock的文档说:“只有在Clock#canAnimate和Clock#shouldAnimate为true时,时钟才会滴答。” 但这不是我得到的。我目前看到的是:

viewer.clock.canAnimate = false;
viewer.clock.shouldAnimate = false;
viewer.clock.onTick.addEventListener(function(clock){
    console.log("Tick");
});

控制台中的结果显示时钟仍在滴答滴答:

Tick
Tick
Tick
Tick
...

我想做的是:

viewer.clock.stopTicking(); // or whatever that command would be...
while (someCondition){
    // run expensive code
    tick(); // issue manual tick
}

谢谢你的帮助!最高

emackey

Cesium API的一个古老的怪癖是,时钟的onTick事件会为渲染的每个动画帧触发,无论时钟是否提前。

如果您想自己控制Cesium的渲染循环,可以这样做:

viewer.useDefaultRenderLoop = false;

function myOwnRenderLoop() {
    viewer.resize();
    viewer.render();
    Cesium.requestAnimationFrame(myOwnRenderLoop);
}

Cesium.requestAnimationFrame(myOwnRenderLoop);

上面,我使用requestAnimationFrame,因此循环运行得尽可能快。但是我可以将其替换setTimeout为一个较慢的循环,以模拟较差的渲染性能。请注意,使用较长的时间间隔时,使用这种方法会降低交互性和屏幕更新速度。

viewer.useDefaultRenderLoop = false;

function myOwnRenderLoop() {
    viewer.resize();
    viewer.render();
    window.setTimeout(myOwnRenderLoop, 500);
}

window.setTimeout(myOwnRenderLoop, 500);

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章