业务数据输出为3DTiles模型

最近的公司项目要求实现一个将业务数据转3DTiles模型文件的功能。这里记录一下实现要点。
由于业务数据本身可能是多种多样的,虽然我接的需求是对应的带有具体业务数据的GIS数据。但总之这里就认为业务数据本身是可以直接转换成顶点,索引等图形数据。
另外这项业务需求中输出的可渲染内容格式为B3DM,所以主要以此出发来考虑实现。
总的来说,该过程的主要要点如下:
1、3DTiles文件的生成。
2、B3DM的生成。
3、binary gltf的生成。
相关文档:
3DTiles文件格式glTF2.0文件格式B3DM文件格式
其实上述3个文档看完基本就已经明白了整个输出流程了。
下面是流程记录。

1、3DTiles文件的生成

简单的说,一个3DTiles文件由主json和若干可渲染内容的文件组成。其中主json描述了3DTiles瓦片的组织形式、每个瓦片的变换、瓦片间细化规则、每个瓦片的实际可渲染内容路径等信息。
所以针对3DTiles的主json输出,主要需要考虑的就是:
1、将业务数据合理划分为瓦片。确保根据geometric error和refine属性,生成的瓦片,能够合理的进行LOD。
geometric error的计算,官方并没有给出确定的公式或建议,只能根据经验和业务逻辑自己调整。
2、对于座标变换,glTF默认的座标系如下:
在这里插入图片描述
而以具体的显示端的图形库为例,例如cesium,它用于具体的图形显示时的座标系是地心地固座标系(Cesium.Cartesian3中xyz的具体意义),如下:
在这里插入图片描述
因此,3DTiles主json中节点的transform在计算时,需要将这些问题考虑进去。另外计算transform需要一定的线代知识,主要是平移、旋转和缩放。

2、B3DM文件的生成

B3DM文件的组成格式在相关文档中有详细叙述,大致可以划分如下:
在这里插入图片描述
可以舍弃掉一些对于业务需求不适用的字段。例如batch table,在本次做的业务中完全不需要,这些字段直接不输入即可。
此外B3DM以及binary glTF由于是二进制文件,需要按照文档要求的字节对齐和字节序输出。

3、binary glTF的生成

在2中的结构图可以看到,binary glTF除header外主要包含chunk[0]和chunk[1]两个部分,其中chunk[0]是Structured JSON content。chunk[1]对应是一个binary buffer数组,其中的每一个buffer可能是顶点,索引,材质等的二进制数据之一。总之文档中写的很详细,按照文档输出即可。这一步涉及的就是将具体的数据转换为可渲染内容。理论上来说,这一步生成的binary glTF直接输出为文件后,是可以改后缀为.glb,然后在任意支持glb格式的3D模型查看器中看到的文件。
大概的流程就是这样。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章