????????目前有傾斜攝影測量數據和美工制作的3dsMax模型數據,需要對這兩種數據進行處理,以便于在cesium上進行展示,模型處理方法如下:
1.傾斜攝影測量模型生產
????????傾斜攝影測量數據是通過無人機搭載的五鏡頭相機拍攝的某區(qū)域的照片,照片數據共有800張,每張照片均有經緯度坐標,通過ContextCapture軟件進行空三計算后,即可進行三維重建,ContextCapture軟件的使用較簡單,其中需要注意的就是生產的三維模型數據格式選擇cesium b3dm,數據坐標系選擇WGS84,模型生產完成后,通過如下代碼即可加載到cesium上
//加載3d tileset
var tileset = new Cesium.Cesium3DTileset({
url: "/data/Production_1_4326/Scene/Production_1_4326.json"
});
// earthView.terrainProvider = Cesium.createWorldTerrain();
//傾斜模型與CESIUM DEM高程誤差,需手動調整
var height = -1080;
// var height = -25;
let thisView = earthView;
tileset.readyPromise
.then(tileset => {
this.droneModalPrimitive = thisView.scene.primitives.add(tileset);
thisView.zoomTo(
tileset,
new Cesium.HeadingPitchRange(
0.0,
-0.5,
tileset.boundingSphere.radius * 2.0
)
);
//貼地顯示
var cartographic = Cesium.Cartographic.fromCartesian(
tileset.boundingSphere.center
);
var surface = Cesium.Cartesian3.fromRadians(
cartographic.longitude,
cartographic.latitude,
0.0
);
var offset = Cesium.Cartesian3.fromRadians(
cartographic.longitude,
cartographic.latitude,
height
);
var translation = Cesium.Cartesian3.subtract(
offset,
surface,
new Cesium.Cartesian3()
);
tileset.modelMatrix = Cesium.Matrix4.fromTranslation(translation);
})
.otherwise(function(error) {
console.log(error);
});
2. 3dsMax模型導入
2.1插件安裝
????????首先對美工使用的3dsMax軟件添加一個DAE數據導出插件,插件下載地址見https://github.com/KhronosGroup/OpenCOLLADA/releases,下載指定版本的插件,然后解壓dle文件到3dsMax的plugins目錄,重啟3dsMax,即可完成插件的安裝。
2.2模型導出
????????將模型導出為DAE格式,通過安裝的插件,能夠保證模型材質不丟失
2.3模型切片
????????下載cesiumlab,cesiumlab是一款免費的cesium數據處理工具,使用手機號注冊后即可使用,打開軟件登陸后進入數據處理——人工模型切片工具
微信截圖_20191211092554.png
2.3.1輸入模型地理坐標
????????美工制作好的模型是不具有地理坐標的,點擊人工模型切片工具的右側的添加按鈕,將DAE模型添加到工具中,然后點擊位置按鈕,輸入模型的經緯度坐標數據
微信截圖_20191211092832.png
確定了模型的地理坐標后,即可點擊確定進行模型切片,cesiumlab會將DAE模型文件轉換為b3dm切片數據
2.3模型加載
切片完成后的模型已經轉換成為3dTiles數據格式,加載代碼如下
var tileset = earthView.scene.primitives.add(
new Cesium.Cesium3DTileset({
url: modelUrl,
modelMatrix: Cesium.Matrix4.fromArray([
1,
0,
0,
0,
0,
1,
0,
0,
0,
0,
1,
0,
0,
0,
0,
1
])
})
);
earthView.flyTo(tileset);