上一節(jié)介紹3D Tiles渲染調(diào)度的時候,我們提到目前Cesium支持的Cesium3DTileContent目前支持如下類型:
Batched3DModel3DTileContent
Instanced3DModel3DTileContent
PointCloud3DTileContent
Composite3DTileContent
其中Composite3DTileContent是復合數(shù)據(jù),PointCloud3DTileContent是只包含F(xiàn)eatureTable和BatchTable的點云數(shù)據(jù)(從官方給的數(shù)據(jù)結(jié)構來看,我沒有親自測試)。本節(jié)主要以Batched3DModel3DTileContent和Instanced3DModel3DTileContent兩種類型,介紹一下3DTiles的數(shù)據(jù)結(jié)構和核心技術點。
渲染
結(jié)合上一節(jié),先給出一個流程圖,建議大圖邊看邊思考。其中紅線是表明狀態(tài)變化。TileContent是一個抽象概念,具體是它的繼承類Batched3DModel或Instanced3DModel來完成具體的功能,而每一個具體的Content會根據(jù)自己的數(shù)據(jù)結(jié)構的差異而有所差別。
3D Tiles也是基于狀態(tài),從UNLOADING開始,通過一系列的request,完成最初的數(shù)據(jù)加載過程,結(jié)束LOADING狀態(tài),進入Pocessing過程,也就是數(shù)據(jù)解析。數(shù)據(jù)解析完后進入READY狀態(tài),通過selectTile,最終調(diào)用Content對應的update方法,構造最終的drawcommand,加入渲染隊列。當然,如果有需要釋放的Tile,則在unloadTiles中處理。細心的人會發(fā)現(xiàn)Pocessing和Ready狀態(tài)。最終調(diào)用的都是update方法。這里解釋一下:3D Tiles中主要的數(shù)據(jù)部分就是glTF,而glTF也是基于狀態(tài)管理的,無論是glTF的解析還是構造DrawCommand,只是state不同,都是在update方法中完成的。如上圖,這里也用橙色箭頭做了說明。
如上給出了一個相對完整的過程,Content的內(nèi)容主要是glTF,這塊我們之前也介紹過,所以下面主要集中在b3dm中BatchTable和FeatureTable。