在介绍Scene渲染之前,我想先说一下我之前写过一个render渲染序列和它们之间的联系。这两个有什么区别和联系呢。简单的说,Scene是Cesium的渲染队列的构建,而Render是Cesium为了在WebGL渲染而做了一套封装。现有Scene的渲染队列构建,才有Render的最终渲染。针对Scene渲染,我们要考虑地球的所有对象是如何渲染出来的,入口在哪里,针对Render模块,WebGL的Context上下文在哪里,离屏渲染的帧缓冲区在哪里。Globe地球有两个特殊的类,一个是Globe.js,还有一个是GlobeDepth.js。我们可以说,Globe属于Scene渲染的重要模块,它组织地形和影像渲染队列的创建。GlobeDepth属于Scene和Render的一个链接点,GlobeDepth是帧缓冲区创建的起点。
要完全搞清楚Cesium的Scene渲染队列,首先,我们要找到Cesium的渲染入口。和所有的WebGL动画一样,Cesium也是用 requestAnimationFrame来实现动画的。requestAnimationFrame是什么,网上有很多资料,可以去查。requestAnimationFrame能保证回调函数在屏幕每一次的绘制间隔中只被执行一次,这样就不会引起丢帧现象,也不会导致动画出现卡顿的问题。Cesium整个渲染的入口在CesiumWidget类中。该函数一旦启动就永不停息。
一:渲染入口
动画实现
function startRenderLoop(widget) {
widget._ren