1. 程式人生 > >cesium導入3D模型(obj轉gltf)

cesium導入3D模型(obj轉gltf)

出現 移動 mark 簡單 批處理 -s default 發現 pri

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) });

加載後發現模型不出現,排查後原因是加載地形後模型被擋住,將模型放大到一定程度或放置位置在一定高度就能看到





cesium導入3D模型(obj轉gltf)