进一步学习 Cesium 和 3D Tiles 数据相关
接此;
https://blog.csdn.net/bcbobo21cn/article/details/112464630
如下一段代碼;也能加載出3D Tiles數據;此段代碼和前文的有些相似;
<script> var viewer = new Cesium.Viewer('cesiumContainer');var tileset = viewer.scene.primitives.add(new Cesium.Cesium3DTileset({url: './SampleData/Cesium3DTiles/Classification/Photogrammetry/tileset.json'}));tileset.readyPromise.then(function(tileset) {viewer.scene.primitives.add(tileset);viewer.zoomTo(tileset, new Cesium.HeadingPitchRange(0.5, -0.2, tileset.boundingSphere.radius * 1.0));}).otherwise(function(error) {console.log(error);}); </script>標準的加載代碼是如下,
var tileset = viewer.scene.primitives.add(new Cesium.Cesium3DTileset({url: url, //數據路徑maximumScreenSpaceError: 2, //最大的屏幕空間誤差maximumNumberOfLoadedTiles: 1000, //最大加載瓦片個數modelMatrix: m //形狀矩陣 }));? ? 下面來學習相關參數和3D Tiles數據格式的相關內容;
第一個參數url,已經了解;
第三個參數是,最大加載瓦片個數;
? ? 地圖瓦片的概念,
瓦片地圖
? ? 瓦片地圖金字塔模型是一種多分辨率層次模型,從瓦片金字塔的底層到頂層,分辨率越來越低,但表示的地理范圍不變。
? ? 進行分塊,從地圖圖片的左上角開始,從左至右、從上到下進行切割,分割成相同大小(比如256x256像素)的正方形地圖瓦片,形成第0層瓦片矩陣;
? ? 在第0層地圖圖片的基礎上,按每2x2像素合成為一個像素的方法生成第1層地圖圖片,并對其進行分塊,分割成與下一層相同大小的正方形地圖瓦片,形成第1層瓦片矩陣;
? ? 采用同樣的方法生成第2層瓦片矩陣;…;如此下去,直到第N一1層,構成整個瓦片金字塔。
這里maximumNumberOfLoadedTiles應該指發布出來的一幅圖片被切成小圖片的個數;
根據cesium教程,單個瓦片的位置信息是寫到了數據中的,即.b3dm和對應的json文件中;
打開這兩個文件看下;我確實找不到瓦片的位置信息是哪些,很多東西;
下面來學習3D Tiles 數據格式相關內容;
3dTiles 數據規范概述
? ? 三維數據(三維模型)是三維可視化重要的一環;三維數據眾多,行業跨界廣。有各種三維數據格式;
? ? three.js的各種加載器實現了大部分通用三維格式的加載,屏蔽了格式不同的數據結構差異;
? ? 場景一大,模型文件體積變大,解析所耗費的時間越來越長;
? ? 產生了三維圖形界的通用格式:glTF;它面向終點,它按照圖形編程所需的格式來存儲數據,借以二進制編碼提高傳輸速度;
? ? 它面向終點,就意味著可編輯性差,因為渲染性能的提高犧牲了可編輯性,它不再像3ds、dae甚至是max、skp一樣容易編輯和轉換;
? ? 大多數三維軟件提供了glTF格式的轉換,或多一步,或一步到位;
? ? cesium.js 號稱是 webgl 封裝的三維地理庫,是支持 gltf 模型的加載的;
? ? 面對大規模精細三維數據的加載,還要照顧到GIS的各種坐標系統、分析計算,gltf這種單個模型的方案顯得力不從心;
? ? 然后,Cesium 團隊借鑒傳統2DGIS的地圖規范——WMTS,借鑒圖形學中的層次細節模型,打造出大規模的三維數據標準—— 3d-Tiles,中文譯名:三維瓦片;
? ? 它在模型上利用了 gltf 渲染快的特點,對大規模的三維數據進行組織,包括層次細節模型、模型的屬性數據、模型的層級數據等;
? ? 3dTiles 是一種規范,在規范的指導下,各種資源文件可以是獨立存在于硬盤中的目錄、文件,也可以以二進制形式寫入數據庫中;
? ? glTF 也是一種規范,它的數據文件不一定就是后綴名為 .gltf 的文件,也不一定只有一個文件(glTF 的文件還可以是二進制文件、紋理貼圖文件等);
? ? 3dTiles還有一個特點:那就是不記錄模型數據,只記錄各級“Tile”的邏輯關系,以及“Tile”自己的屬性信息;
tileset.json文件 - 1
? ? 3dTiles數據的入口文件是一個名叫 tileset.json 的文件,而通常來說,這個json必須存在以下幾個頂級對象:
? ? asset
? ? root
? ? geometricError
? ? geometricError,只知道這個數值的大小能控制 LOD 的顯示隱藏,且這個數值父級瓦片一定比子級瓦片大;
? ? asset 對象,記錄了整個數據集的聲明和歸屬數據,類似于數據聲明,能在此寫入 version、tilesetVersion ?等屬性;
? ? root 對象,即這個數據集的根瓦片,每個3dTiles數據集必須有一個 root 對象;
? ? 至于 tileset.json 中其他的頂級對象,可查閱官方文檔;
總結
以上是生活随笔為你收集整理的进一步学习 Cesium 和 3D Tiles 数据相关的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MFC CAsyncSocket类基本使
- 下一篇: 在PowerShell中创建对象并添加属