Open Scene Gragh Binary是OSGB的全称
数据转换
正确的OSGB格式数据
- 倾斜摄影数据仅支持 smart3d 格式的 osgb 组织方式, 数据目录必须有一个
Data目录的总入口,Data目录同级放置一个 metadata.xml 文件用来记录模型的位置信息。 - 每个瓦片目录下,必须有个和目录名同名的 osgb 文件,否则无法识别根节点。
- 正确的目录结构如下:
–metadata.xml
–Data\Tile_000_000\Tile_000_000.osgb
工具:
The fastest tools for 3dtiles convert in the world! include these tools: osgb => 3dtile , convert huge of osgb file to 3dtiles. shapefile => 3dtile, convert shape file to 3dtiles. fbx => 3dtile, convert fbx file to 3dtile, include auto_lod\texture convert etc..
直接使用下载编译好的程序
输入命令
3dtile.exe [FLAGS] [OPTIONS] --format <osgb,shape,gltf> --input <FILE> --output <FILE>
事例:
3dtile.exe -f osgb -i E:\Data\hgc -o E:\Data\hgc_test3dtile.exe -f osgb -i E:\Data\dayanta -o E:\Data\dayanta_test -c "{\"offset\": 0}"3dtile.exe -f shape -i E:\Data\aa.shp -o E:\Data\aa --height height3dtile.exe -f gltf -i E:\Data\TT\001.osgb -o E:\Data\TT\001.glb3dtile.exe -f gltf -i E:\Data\TT\001.obj -o E:\Data\TT\001.glb3dtile.exe -f b3dm -i E:\Data\aa.b3dm -o E:\Data\aa.glb
OSGB元数据


制作好的3dtiles数据


加载
一般情况3dtiles自带坐标,可以直接使用如下代码进行加载:
var tileset = new Cesium.Cesium3DTileset({url: './3d/tileset.json'});viewer.scene.primitives.add(tileset);viewer.zoomTo(tileset);
如果坐标系有偏移,需要进行矩阵变换
//方法一:var m = Cesium.Matrix4.fromArray([1.0, 0.0, 0.0, 0.0,0.0, 1.0, 0.0, 0.0,0.0, 0.0, 1.0, 0.0,x, y, z, 1.0]);//方法二:var translation=Cesium.Cartesian3.fromArray([x, y, z]);m= Cesium.Matrix4.fromTranslation(translation);var tileset = new Cesium.Cesium3DTileset({url: './3d/tileset.json', //数据路径maximumScreenSpaceError: 2, //最大屏幕空间误差maximumNumberOfLoadedTiles: 1000, //最大加载瓦片个数modelMatrix: m //转移矩阵});
注意该数值需要不断的调整来确定3D Tile和底图是否贴合,以及位置是否正确(为了便于确定每次修改后3D Tile改变的位置可以通过一段代码直接将视角锁定3D Tile的位置)
var boundingSphere = null;function zoomToTileset() {boundingSphere = tileset.boundingSphere;viewer.camera.viewBoundingSphere(boundingSphere, new Cesium.HeadingPitchRange(0, -2.0, 0));viewer.camera.lookAtTransform(Cesium.Matrix4.IDENTITY);}tileset.readyPromise.then(zoomToTileset);
如上所示代码,在每次加载3D Tile的同时也会锁定其位置。
