之前大概看了一下工具的内容,后边看了一下源代码,根据其中的样例数据,进行了测试,并将数据加载到cesium中进行了观看。
开源地址:
https://github.com/PrincessGod/objTo3d-tiles
目前这个源码不再维护了,简单的对其中代码和功能进行一些分析。
想了解3dtiles的结构,可以参见以下两个网址:
https://github.com/CesiumGS/3d-tiles/tree/master/specification
https://github.com/CesiumGS/3d-tiles/tree/master/specification/TileFormats/Batched3DModel
3dtiles中的模型格式是b3dm/i3dm等,代码中是需要先把obj格式的模型转换成以上格式,gltf又是b3dm/i3dm的重要组成部分,所以,工具是先将obj转换成gltf/glb,根据Batched3DModel的说明,将gltf/glb上添加相应的BatchTable和FeatureTable信息,组合成b3dm/i3dm文件。
有了b3dm/i3dm的文件,还需要在tileset.json中添加模型的文件坐标信息和转换信息,其中,模型的boundingVolume分成三种形式:region、box和sphere,这个需要根据模型的实际尺寸,在Cesium中进行计算。
关键的实现代码:
createGltf.js、createB3dm.js、createSingleTileset.js、getBufferPadded8Byte.js、getJsonBufferPadded8Byte.js
tileset.json中设置了transform的转换信息,因为模型的自身坐标系一般是YUP,所以,到三维场景中,需要一个坐标的转换,在有些3dtiles生成的工具,通常把这个转换集成到b3dm/i3dm文件中。
多个模型文件需要把tileset.json进行合并,combineTileset.js中实现了此功能。
obj转换成gltf/glb,有时会存在转换问题,可以使用其他工具,提前转换成gltf/glb,再修改代码,进行集成生成。
这样制作的3dtiles合并了多个三维模型,数量多了,在性能上还是会存在一些问题,优化性能还需要从模型的lod和数据索引方面进行修整。
更多文章请关注公众号查看!