Cesium開發 3D tile的載入

2021-09-12 10:12:24 字數 1969 閱讀 2644

cesium 3d tile是cesium的一種特有的3d模型格式,其檔名字尾為.b3dm,而要在自己開發的平台上呼叫這些3d tile,一般為通過字尾為.json格式的檔案來呼叫.b3dm格式的3d tile。

如博主的3d tile為通過無人機傾斜攝影湄洲島而獲得的影像(.osgb),轉換為cesium能夠呼叫的格式(博主通過cesiumlab進行轉換,該軟體為國內的一款專門為cesium的3d tile提供格式轉換的軟體,有收費也有免費,cesiumlab免費提供的功能足以讓大家學習使用。直通車:

從截屏裡可以看到每乙個b3dm格式的檔案都有其對應的json格式檔案。

而上圖紅框標記出的則是多個部分3d tile的整合,通常我們呼叫這個json檔案即可

var tileset = new cesium.cesium3dtileset();
以上是呼叫3d tile的**,需要注意的是

> modematrix:m
這串**,裡面的

m(自定義變數)

是3d tile的轉移矩陣,該矩陣的作用是通過x,y,z三個軸的數值修改來修改3d tile的位置,因為3d tile雖然本身自帶座標,但有時還是會和不同座標系的地圖產生偏差,所以我們需要轉移矩陣來進行3d tile位置的調整。具體如下(兩種方式):

一:var m = cesium.matrix4.fromarray([

1.0, 0.0, 0.0, 0.0,

0.0, 1.0, 0.0, 0.0,

0.0, 0.0, 1.0, 0.0,

x, y, z, 1.0

]);二:var translation=cesium.cartesian3.fromarray([x, y, z]);

m= cesium.matrix4.fromtranslation(translation);

我們可以直接對x,y,z進行修改,如將其修改為(另一種方式同理)

var m = cesium.matrix4.fromarray([

1.0, 0.0, 0.0, 0.0,

0.0, 1.0, 0.0, 0.0,

0.0, 0.0, 1.0, 0.0,

1.0, 2.0, 3.0, 1.0

]);

注意該數值需要不斷的調整來確定3d tile和底圖是否貼合,以及位置是否正確(為了便於確定每次修改後3d tile改變的位置可以通過一段**直接將視角鎖定3d tile的位置)

var boundingsphere = null;

function zoomtotileset()

tileset.readypromise.then(zoomtotileset);

如上所示**,在每次載入3d tile的同時也會鎖定其位置。最後效果如下圖:

Cesium中3DTile介紹及示例

官網介紹 tileset.json 3d tiles 引入了3d圖形領域的技術並建立在gltf之上,它定義了乙個空間層次結構,用於快速流和精確渲染,平衡從全球到建築內部的任何規模的效能和視覺質量。檔案格式介紹 tree master specification tileset是在空間資料結構 樹 中...

cesium開發基礎(3)cesium所有功能

支援各種幾何體 點 線 面 標註 公告牌 立方體 球體 橢球體 圓柱體 走廊 corridors 管徑 牆體 視覺化效果包括 基於太陽位置的陰影 自身陰影 柔和陰影。大氣 霧 太陽 陽光 月亮 星星 水面。粒子特效 煙 火 火花。地形 模型 3d tiles模型的面裁剪。物件點選和地形點選。支援滑鼠...

Cesium的3dtileset座標和高度問題

平時我載入的3dtileset內部是模型座標系的,模型定位的話使用cesium.transforms.headingpitchrolltofixedframe去控制位置和方向角。但是有時會遇到3dtileset內部是世界座標系的,那就不需要上面的定位了,因為內部自己有座標。可是有時候3dtilese...