cesium-01 render入口

1.Viewer初始化里面有
注意有个useDefaultRenderLoop参数

  // Cesium widget
  var cesiumWidget = new CesiumWidget(cesiumWidgetContainer, {
    imageryProvider:
      createBaseLayerPicker || defined(options.imageryProvider)
        ? false
        : undefined,
    clock: clock,
    skyBox: options.skyBox,
    skyAtmosphere: options.skyAtmosphere,
    sceneMode: options.sceneMode,
    mapProjection: options.mapProjection,
    globe: options.globe,
    orderIndependentTranslucency: options.orderIndependentTranslucency,
    contextOptions: options.contextOptions,
    useDefaultRenderLoop: options.useDefaultRenderLoop,
    targetFrameRate: options.targetFrameRate,
    showRenderLoopErrors: options.showRenderLoopErrors,
    useBrowserRecommendedResolution: options.useBrowserRecommendedResolution,
    creditContainer: defined(options.creditContainer)
      ? options.creditContainer
      : bottomContainer,
    creditViewport: options.creditViewport,
    scene3DOnly: scene3DOnly,
    terrainExaggeration: options.terrainExaggeration,
    shadows: options.shadows,
    terrainShadows: options.terrainShadows,
    mapMode2D: options.mapMode2D,
    requestRenderMode: options.requestRenderMode,
    maximumRenderTimeChange: options.maximumRenderTimeChange,
  });

对应useDefaultRenderLoop的set函数里面有startRenderLoop函数

  useDefaultRenderLoop: {
    get: function () {
      return this._useDefaultRenderLoop;
    },
    set: function (value) {
      if (this._useDefaultRenderLoop !== value) {
        this._useDefaultRenderLoop = value;
        if (value && !this._renderLoopRunning) {
          startRenderLoop(this);
        }
      }
    },
  }

startRenderLoop函数里面对接执行render函数
在这里插入图片描述
render函数

在这里插入图片描述
此处this._canRender是由configureCanvasSize函数判断,这里给的是true
在这里插入图片描述

进入下一步

this._scene.initializeFrame();

这里注意scene是在CesiumWidget里面初始化的

var scene = new Scene({
      canvas: canvas,
      contextOptions: options.contextOptions,
      creditContainer: innerCreditContainer,
      creditViewport: creditViewport,
      mapProjection: options.mapProjection,
      orderIndependentTranslucency: options.orderIndependentTranslucency,
      scene3DOnly: defaultValue(options.scene3DOnly, false),
      terrainExaggeration: options.terrainExaggeration,
      shadows: options.shadows,
      mapMode2D: options.mapMode2D,
      requestRenderMode: options.requestRenderMode,
      maximumRenderTimeChange: options.maximumRenderTimeChange,
    });
    this._scene = scene;

Scene初始化里面已经执行了initializeFrame
在这里插入图片描述

在这里插入图片描述

此处可以看到相机更新的逻辑

下面继续
在这里插入图片描述
分析这两行,看看有什么意义

var currentTime = this._clock.tick();
this._scene.render(currentTime);

首先Clock是在CesiumWidget初始化的时候构建的
在这里插入图片描述
tick函数
在这里插入图片描述
这里的tick就是每一帧都会调用,并且绑定上Clock.OnTick事件

在这里插入图片描述
所以Clock.OnTick每一帧都会调用了~~

然后又回到Viewer构造函数里

在这里插入图片描述

clock.onTick又和Viewer._onTick函数绑定上了,间接使得Viewer._onTick每一帧都会执行

其次就是this._scene.render(currentTime)了,每一帧都会执行

到此分析出cesium最终每一帧执行的两个关键的函数

第一个 this._scene.render(currentTime)
第二个 Viewer._onTick

下一篇分析this._scene.render(currentTime)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值