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
为了避免一个个文件转换的麻烦,参考博客,写了一个批处理文件,将文件夹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)
});
加载后发现模型不出现,排查后原因是加载地形后模型被挡住,将模型放大到一定程度或放置位置在一定高度就能看到