概述
在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 binobj2gltf.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-masterOBJ %%i in (*.obj) do node bin/obj2gltf.js -i %%i -o OUTPUTtest.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
加载后发现模型不出现,排查后原因是加载地形后模型被挡住,将模型放大到一定程度或放置位置在一定高度就能看到。
最后
以上就是体贴荷花为你收集整理的obj转换为gltf方法的全部内容,希望文章能够帮你解决obj转换为gltf方法所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复