Cesium中的3DTiles数据加载的过程中会进行缓存,使用的是Cesium3DTilesetCache这个类,这个类中维护了一个双向链表DoublyLinkedList,链表的每个节点DoublyLinkedListNode包含了3部分内容,item(即tile)、previous、next,而DoublyLinkedList维护了链表的head和tail游标,并包含三个方法remove(移除节点)、add(添加节点)、slice(移动节点)。

对于Cesium3DTilesetCache,这个类中使用了一个空节点sentinel(哨兵),这个节点的在链表中起到隔离作用,每一帧中这个哨兵节点都可能会移动,哨兵的左边是当前帧之前缓存的瓦片(数据已经下载完成)节点,右边是当前帧需要的瓦片节点,其中左边的节点受到瓦片集的最大内存选项maximumMemoryUsage和是否剔除的标记trimTiles以及sentinel的三方挟持,只要有一方不满足条件就会删除已经缓存的节点,在当前帧中会检索是否之前缓存的节点在当前帧中可以重复利用,如果是则会将该节点从哨兵的左边移动到哨兵的右边,当前帧处理完成后,哨兵节点会reset到链表的尾部,并进行新一轮的哨兵移动。

/**
* Stores tiles with content loaded.
* 用来存储已经

Cesium3DTilesetCache是Cesium中用于管理3DTiles数据加载缓存的机制,它使用双向链表结构,通过哨兵节点来区分当前帧已加载和未加载的瓦片。在每一帧开始时,缓存的瓦片根据最大内存限制和剔除策略进行检查,如果超出限制或不再需要,将被从缓存中移除。当瓦片在当前帧中被重新利用时,会从哨兵左侧移动到右侧。此机制确保了高效的数据管理和内存优化。
最低0.47元/天 解锁文章
1375

被折叠的 条评论
为什么被折叠?



