obj转换为gltf方法

在cesium中导入模型需要的是gltf或glb格式的文件,格式转换有两种方法

方法一是将模型从3d max中导出dae格式的文件,然后用collada2gltf工具将dae格式转成gltf格式,本人从网上直接下载了dae文件,使用collada2gltf工具转换后,载入报错“Cannot read property ‘nodes’ of undefined”

换方法二,方法二为cesium官方提供了obj转gltf文件的工具,一个obj2gltf的库,地址为https://github.com/AnalyticalGraphicsInc/obj2gltf,下载后在命令行使用npm安装obj2gltf

npm install --save obj2gltf
  • 1

安装完成后,将生成的node_modules文件粘贴到之前下载的obj2gltf库的目录下,进入到obj2gltf根目录,执行下列语句即可成功转换,-i表示输入文件,-o表示输出文件

 node bin\obj2gltf.js -i ./specs/data/box/box.obj -o box.gltf
  • 1

为了避免一个个文件转换的麻烦,参考博客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
  • 1
  • 2
  • 3
  • 4

按原博主的方法会报缺少参数,添加-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)
      });
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

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

你可能感兴趣的:(科研技术)