ContextCapture 用户指南

按 ID 引用

3MXB 文件包含多种资源,所有这些资源必须全部匹配。如前所述,资源 ID 用于将节点和资源链接在一起。

首次通信发生在节点与其几何结构之间。节点数据包括资源数组,其中枚举了属于节点的每个几何结构资源的 ID。标头的资源数组列出了文件中至少一个节点所需的全部资源。通过将节点的资源 ID 与标头资源 ID 相匹配,可以重建节点的几何结构。

在下图中,节点 0 将资源 0 和资源 1 作为几何结构。资源 0 的类型是几何结构文件,但资源 1 的类型是几何结构缓冲区,并且网格打包在缓冲区 0 中。节点 1 由资源 2 的几何结构定义,位于缓冲区 1 中。系统将为这些缓冲区保留资源在标头中的显示顺序,因此会自动将缓冲区 1 归于资源 2。

3MXB 中的资源属性。绿色表示二进制数据,蓝色表示字符串数据。

几何结构属于一个节点,但一个节点可以具有零个、一个或多个几何结构网格。节点具有多个几何结构的原因有两个。第一,一个节点可以具有纹理和无纹理数据或使用几幅影像设置纹理的数据。在这种情况下,可以方便地在多个缓冲区中分离几何结构,每个缓冲区对应于一个纹理。第二,某些系统强制几何结构缓冲区的长度最多不超过 MAX_USHORT。例如,针对 WebGL 查看器生成几何结构时,几何结构将分割成若干不超过 MAX_USHORT (65,535) 的缓冲区。这可以适应目标查看器。

第二次通信发生在几何结构网格与相应的纹理之间。资源 ID 同样用于匹配。几何结构网格既可以有单个纹理,也可以完全没有任何纹理。如果需要纹理,则几何结构描述中会显示“纹理”标签。指示的纹理 ID 应为标头资源集合中列出的纹理资源之一的 ID。

纹理可用于不同的节点并由多个几何结构使用。在上述示例中,资源 0 和资源 2 共享资源 p 中的纹理。

完整的标头示例(采用 JSON 格式):

{ "version":1, "nodes":[ { "id":"node0", "bbMin":[28.7803, -12.6859, 17.3977], "bbMax":[30.7065, -2.68368, 28.2069], "maxScreenDiameter":118.819, "children": [ "Tile_p000_p000_p001_L20_00.3mxb"], "resources":[ "geometry0"] } ], "resources":[ { "type":"textureBuffer", "format":"jpg", "id":"texture0", "size":1665 }, { "type":"geometryBuffer", "format":"ctm", "id":"geometry0", "texture":"texture0", "bbMin":[28.7803, -12.6859, 17.3977], "bbMax":[30.7065, -2.68368, 28.2069], "size":1233 } ] }