一、3D Tiles來(lái)源和介紹
它是Cesium于2016年3月定義的一種三維模式瓦片數(shù)據(jù)結(jié)構(gòu),它將海量的三維數(shù)據(jù)用分塊、分層的形式組織起來(lái),很大程度上減輕了瀏覽器的負(fù)擔(dān),除此外還提供了細(xì)節(jié)層次的LOD(Levels of Detail 多細(xì)節(jié)層次)功能,在遠(yuǎn)觀時(shí),降低模型的面數(shù)和精度,拉近后再將細(xì)節(jié)加載出來(lái),大大增強(qiáng)了頁(yè)面的加載速度,更可以用于跨桌面使用,使得web端和移動(dòng)應(yīng)用程序共享,主要適用于靜態(tài)場(chǎng)景
二、3D Tiles數(shù)據(jù)特點(diǎn)
-
開放性
它是一個(gè)開放式的數(shù)據(jù)規(guī)范,我們可以根據(jù)實(shí)際需求設(shè)定三維模型的大小和范圍,此外還能適配多種空間分區(qū)方案,如:普通網(wǎng)格、四叉樹、八叉樹等四叉樹:它是一種樹形數(shù)據(jù)結(jié)構(gòu),它的每個(gè)節(jié)點(diǎn)下之多可以有四個(gè)子節(jié)點(diǎn)。通常把二維空間細(xì)分為四個(gè)區(qū)域,并把該區(qū)域里的相關(guān)信息存入到四叉樹節(jié)點(diǎn)中,四叉樹的每一個(gè)節(jié)點(diǎn)代表一個(gè)矩形區(qū)域,每一個(gè)矩形區(qū)域又可分為四個(gè)小矩形區(qū)域
八叉樹:相比四叉樹,八叉樹是將二維空間延伸到了三維空間,樹種的子節(jié)點(diǎn)只會(huì)有八個(gè)或者零個(gè),每一個(gè)節(jié)點(diǎn)同樣用于存儲(chǔ)數(shù)據(jù)
-
異質(zhì)性
支持將不同類型的三維模型數(shù)據(jù),如普通模型數(shù)據(jù)加傾斜攝影數(shù)據(jù)加自繪幾何數(shù)據(jù)放在一起,轉(zhuǎn)化為統(tǒng)一標(biāo)準(zhǔn)的數(shù)據(jù)集,讓它們可以在同一場(chǎng)景下顯示出來(lái) -
專為三維可視化設(shè)計(jì)
專為三維可視化設(shè)計(jì),并在其中引入了圖形領(lǐng)域的技術(shù),在不滿足特定條件的情況下,并不會(huì)對(duì)場(chǎng)景內(nèi)的模型做整個(gè)渲染,而是只會(huì)渲染個(gè)輪廓,大大降低了計(jì)算量,使得瀏覽器請(qǐng)求到數(shù)據(jù)后,渲染的流程也更加的簡(jiǎn)單。同時(shí),因?yàn)槿S模型預(yù)先處理成了分塊的三維瓦片格式,所以也減少了WebGL繪制請(qǐng)求的數(shù)量。 -
可交互性
其支持對(duì)加載模型的拾取,和樣式的修改,大量加載以后,可以對(duì)其中的單獨(dú)模型進(jìn)行交互,如:高亮顯示鼠標(biāo)懸停處的模型、或進(jìn)行刪除等,也可根據(jù)建筑模型的高度和年代,設(shè)置不同的顯示效果而不需要重新更新代碼
三、3D Tiles格式文件代碼詳解
3D Tiles的格式是由兩個(gè)部分組成的:
其一是如下的json格式的數(shù)據(jù),這里的asset是一個(gè)包含整體tileset元素屬性的對(duì)象,其中的version屬性是定義3D Tiles版本的字符串,此外這里還可以選填一個(gè)tilesetVersion屬性,它可以用于定義特定應(yīng)用中的版本號(hào),geometricError屬性定義了一個(gè)非誤差單位,低于這個(gè)誤差值,瓦片集不會(huì)被渲染(單位:米),root屬性用于定于根瓦片。它的子項(xiàng)transform也是一個(gè)可選項(xiàng),它的作用是在加載大量模型或者建筑物的情況下,單個(gè)模型的點(diǎn)云瓦片集能在它自己的坐標(biāo)系中定義,其內(nèi)的數(shù)據(jù)是一個(gè)4*4的仿射變換矩陣,以列主序存儲(chǔ),用來(lái)實(shí)現(xiàn)從瓦片局部坐標(biāo)系到父瓦片或根瓦片坐標(biāo)系的變換。root內(nèi)部也有一個(gè)geometricError屬性,前者是整個(gè)瓦片不被渲染的誤差,后者只是當(dāng)前瓦片集被渲染的誤差。content屬性通過url引入文件,其支持的二進(jìn)制文件格式有.b3dm、.i3dm、.pnts等,甚至可以在其中再放入一個(gè)3D Tiles文件,前提是不可以自己引用自己。content上方的refine屬性定義的是LOD細(xì)化的方法,簡(jiǎn)單來(lái)說就是瓦片是如何切換的。
構(gòu)成3D Tiles的第二部分就是其引用的瓦片數(shù)據(jù)文件了,.b3dm就是我們用于渲染數(shù)據(jù)的文件文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-401059.html
//json文件
{
"asset": {
"version": "1.0"
},
"geometricError": 70,
"root": {
"boundingVolume": {
"box": [
0,
0,
10,
100,
0,
0,
0,
100,
0,
0,
0,
10
]
},
"transform": [
0.9686356343768792,
0.24848542777253735,
0,
0,
-0.15986460744966327,
0.623177611820219,
0.765567091384559,
0,
0.19023226619126932,
-0.7415555652213445,
0.6433560667227647,
0,
1215011.9317263428,
-4736309.3434217675,
4081602.0044800863,
1
],
"geometricError": 70,
"refine": "ADD",
"content": {
"uri": "buildings.b3dm"
},
"children": [
{
"boundingVolume": {
"box": [
0,
0,
0,
100,
0,
0,
0,
100,
0,
0,
0,
15
]
},
"transform": [
0.35355339059327373,
0.3535533905932738,
0,
0,
-0.3535533905932738,
0.35355339059327373,
0,
0,
0,
0,
0.5,
0,
0,
0,
5,
1
],
"geometricError": 0,
"content": {
"uri": "instances.i3dm"
}
}
]
}
}
四、3D Tiles數(shù)據(jù)使用方法
b3dm格式瓦片集主要用于加載批量的模型,pnts格式瓦片集用于加載點(diǎn)云數(shù)據(jù)模型,cmpt瓦片集,允許一個(gè)cmpt文件內(nèi)嵌多個(gè)其他類型的瓦片。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-401059.html
// 3DTiles并不是Entity的一部分,而是屬于更加底層的primitives
var tileset = viewer.scene.primitives.add(
// 用于實(shí)例化
new Cesium.Cesium3DTileset({
// 放入json文件的路徑
url:"../../lib/TilesetWithViewerRequestVolume/tileset.json",
maximumScreenSpaceError: 2, //最大的屏幕空間誤差,數(shù)字越低,視覺效果越好
maximumNumberOfLoadedTiles: 1000, // 最大加載瓦片個(gè)數(shù)用于給定一定的限制,防止數(shù)據(jù)量過大,占用內(nèi)存過高
})
)
到了這里,關(guān)于三維數(shù)據(jù)格式3DTiles的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!