cesium中支持載入3D模型,不過只支持gltf格式。gltf是khronos組織(起草OpenGL標准的那家)定義的一種交換格式,用於互聯網或移動設備上展現3d內容,充分支持opengl,webgl,opengles圖形加速標准。
在用cesium的過程中難免需要導入建好的obj或dae模型,這時候就需要將這些模型轉成gltf格式了
我比較常用的是obj,所以我用的是obj2gltf
obj轉gltf步驟
首先在cesium目錄下安裝obj2gltf(如果沒有nodejs的就裝一個吧,反正又簡單官方還推薦)
npm install --save obj2gltf
然后在node_modules目錄下找到obj2gltf,把你需要轉的obj和帶的貼圖放在obj2gltf根目錄下(貌似是obj2gltf的bug,指定目錄似乎不管),在obj2gltf目錄下打開命令行,輸入
node bin/obj2gltf.js -i model.obj -o model.gltf
為了避免一個個文件轉換的麻煩,參考博客http://blog.csdn.net/u013929284/article/details/53106331,寫了一個批處理文件,將文件夾A中的obj文件全部轉為對應的gltf文件放入文件夾B中,代碼為
@echo off for /r D:\obj2gltf-master\OBJ %%i in (*.obj) do node bin/obj2gltf.js -i %%i -o OUTPUT\test.gltf pause & exit
按原博主的方法會報缺少參數,添加-i,-o后解決,成功轉換。
成功轉換模型后,將模型放到相應路徑,使用viewer.scene.primitives.add方法加載
var modelMatrix = Cesium.Transforms.eastNorthUpToFixedFrame( Cesium.Cartesian3.fromDegrees(102.73, 25.04, 0)); var model = viewer.scene.primitives.add(Cesium.Model.fromGltf({ url : '../Source/SampleData/Models/pangea3dgalleon.gltf', modelMatrix : modelMatrix, //scale : 10.0, maximumScreenSpaceError: 16 // default value })); viewer.camera.flyTo({ destination : Cesium.Cartesian3.fromDegrees(102.73, 25.04, 2631.082799425431) });
加載后發現模型不出現,排查后原因是加載地形后模型被擋住,將模型放大到一定程度或放置位置在一定高度就能看到
