cesium导入3D模型(obj转gltf)

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

 

加载后发现模型不出现,排查后原因是加载地形后模型被挡住,将模型放大到一定程度或放置位置在一定高度就能看到

 

posted @ 2017-12-28 16:07  缘琪梦  阅读(10837)  评论(1编辑  收藏  举报