Cesium之多影像图层加载原理

在cesium中,一个地形瓦片,无论加多少图层,都是在一个shader中计算的。

在每个ImagerLayer创建影像纹理时候,会往地形Tile中imagery数组中添加TileImagery。比如加了4个layer图层,在一个2_1_0瓦片每个layer图层都会附加3张TileImagery,那么这个地形Tile的imagery数组里将会存储12张纹理。那么就要看一下,在创建这个地形瓦片的时候,总共16个纹理单元,应该不会全用上吧?

addDrawCommandsForTile方法中,会先读取纹理单元最大数量,一般是16个。然后再分析一下是否添加反射、水波纹等等,因为这些也需要占纹理单元,要为他们留出空间,这样一去除,一个drawCommand可能最多能用的只有十一二个纹理单元了。

从地形tile中取出我们的imagery数组,从头开始遍历,以maxTextures为最大值,把没有ready好的和所属layer的透明度是0的imagery过滤掉,以这些纹理构造成一个drawcommand。如果还有没画完的,那就继续再造一个drawcommand,直到把所有imagery都使用完。

const imageryLen = tileImageryCollection.length;
while (numberOfDayTextures < maxTextures && imageryIndex < imageryLen) {
    // 读取每个imagery里面的与texture相关的变量放到uniformMapProperties中

    // 设置command的uniformMap、shaderProgram等属性

    // 构造好command后放到frameState.commandList中
} while (imageryIndex < imageryLen);

你可能感兴趣的:(cesium)