0
点赞
收藏
分享

微信扫一扫

开源objTo3d-tiles的简单分析

辰鑫chenxin 2022-09-27 阅读 17

参见之前分享的公众号文章,​​分享objTo3d-tiles工具​​。

之前大概看了一下工具的内容,后边看了一下源代码,根据其中的样例数据,进行了测试,并将数据加载到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和数据索引方面进行优化。



“原创不易,赞赏是对作者的最好支持!”

举报

相关推荐

0 条评论