cesium中支持载入3D模型,不过只支持gltf格式。gltf是khronos组织(起草OpenGL标准的那家)定义的一种交换格式,用于互联网或移动设备上展现3d内容,充分支持opengl,webgl,opengles图形加速标准。

在用cesium的过程中难免需要导入建好的obj或dae模型,这时候就需要将这些模型成gltf格式了

我比较常用的是obj,所以我用的是obj2gltf

objgltf步骤

首先在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后解决,成功换。

cesium导入3D模型(obj转gltf)_指定目录

成功换模型后,将模型放到相应路径,使用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)
});


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