目录

1. b3dm 概念解析

1. What‘s b3dm

2. b3dm 格式的数据结构有两部分组成 : header / body

1. b3dm 数据也是基于 gltf 的 ( 单模型基础上做了批量化处理 )

3. b3dm 文件解析

1. 局部文件 解析结果 ( 临时方案 )

BATCH_LENGTH

id[] / revitId[] / properties[]

JSON



1. b3dm 概念解析

b3dm 是一个缩写,它的全称是:Batched 3D Mode ( 批量化 3d 模型 ) , 顾名思义,批量化指的是一定有很多个,不止一个

 Batched 3D Model allows offline batching of heterogeneous 3D models, such as different buildings in a city, for efficient streaming to a web client for rendering and interaction. Efficiency comes from transferring multiple models in a single request and rendering them in the least number of WebGL draw calls necessary. Using the core 3D Tiles spec language, each model is a feature.​Per-model properties, such as IDs, enable individual models to be identified and updated at runtime, e.g., show/hide, highlight color, etc. Properties may be used, for example, to query a web service to access metadata, such as passing a building's ID to get its address. Or a property might be referenced on the fly for changing a model's appearance, e.g., changing highlight color based on a property value.​A Batched 3D Model tile is a binary blob in little endian.--------------------------------------------------------------------------------------------------------译文:b3dm允许不同类型的3d模型,例如城市里不同的建筑,组织成高效的数据流到web端渲染和交互,这种高效率来自于一次请求转化多个模型并且用最少的webGL消耗。在3d tiles特殊的语言中,每一个模型都是一个要素。​每一个模型的属性,例如ID能够将模型分离成单个的个体,同样也能对这些模型做更新,颜色变化,是否展示等这样的操作,模型的属性也会有所使用,举个例子来说,通过网络服务去访问元数据,通过建筑的id去访问它的地址,或者动态的属性决定模型外观,根据属性值来改变颜色高度。

1. What‘s b3dm

b3dm 瓦片 是一个 二进制 的 blob

b3dm 也是一种数据格式,这种格式符合3d tiles规范,能够做一些操作,比如说查询,分层设色等。

b3dm 格式的数据通常都是城市的批量化的建筑模型,例如 , 倾斜摄影模型。在实际的生产应用中,倾斜摄影(或者别的格式的大批量模型)的格式并不是b3dm 格式的,绝大多数的倾斜摄影模型格式是 osgb,还有一部分是 obj,所以我们需要把它转化成 b3dm 格式的数据,才能进行进一步的操作。


2. b3dm 格式的数据结构有两部分组成 : header / body

b3dm 格式的数据结构有两部分组成,header 和 body( 有点像 html )

header 部分主要记录了一些 例如版本,字节长度之类的信息。

body 部分主要由3个文件构成 feature table batch table 和 binary gltf

feature table 记录了模型的语义信息,包括每个模型的特征值信息。

batch table 记录了模型的样式以及 rest 请求,还有一些属性信息。


1. b3dm 数据也是基于 gltf 的 ( 单模型基础上做了批量化处理 )

注意 :

b3dm 数据也是基于 gltf 的,也就是说批量的模型中的单个模型的模型格式还是 gltf,并且数据组织方式也和之前讲到过的 gltf 是一样的。

说白了 b3dm 就是在原来 gltf 小模型,单个模型的基础之上,做了批量化的数据组织方式,多了 feature table 和 batch table 两个文件。


3. b3dm 文件解析


1. 局部文件 解析结果 ( 临时方案 )

 数据源 准备阶段1、通过 WinHex 解析 b3bm 格式文件2、截取 解析正常的部分数据3、截取部分 另存为xxx.txt 文件4、通过 json 工具类 校验格式-------------------------------------------------------解析数据数理化阶段1、抽象统一解析 保存好的 JSON 格式文本文件2、所需数据实例化至数据库

BATCH_LENGTH

 {"BATCH_LENGTH": 23}

id[] / revitId[] / properties[]

 {"id": ["aabe04fe-bd80-4e6b-bd1c-7ca5db50ef0c-0056d2bb","aabe04fe-bd80-4e6b-bd1c-7ca5db50ef0c-0056d2c8","aabe04fe-bd80-4e6b-bd1c-7ca5db50ef0c-0056d2e5","aabe04fe-bd80-4e6b-bd1c-7ca5db50ef0c-0056d2ea","aabe04fe-bd80-4e6b-bd1c-7ca5db50ef0c-0056d2f1","467801da-3f36-4be3-b3f9-f2de8b0aa99f-0057ae4b","e8f36b26-a5b1-4026-b578-620c5738b68e-0059b23b","e8f36b26-a5b1-4026-b578-620c5738b68e-0059b241","e8f36b26-a5b1-4026-b578-620c5738b68e-0059b289","e8f36b26-a5b1-4026-b578-620c5738b68e-0059b2a0","aabe04fe-bd80-4e6b-bd1c-7ca5db50ef0c-0056d41b","aabe04fe-bd80-4e6b-bd1c-7ca5db50ef0c-0056d420","aabe04fe-bd80-4e6b-bd1c-7ca5db50ef0c-0056d427","6fa5dcf6-ff4a-4930-aac9-b797f57b424b-00576625","6fa5dcf6-ff4a-4930-aac9-b797f57b424b-0057663f","6fa5dcf6-ff4a-4930-aac9-b797f57b424b-0057665e","6fa5dcf6-ff4a-4930-aac9-b797f57b424b-00576660","467801da-3f36-4be3-b3f9-f2de8b0aa99f-0057ae0c","9f961a30-3b3d-44a2-b73a-db9d54125ba5-00597277","c28ca6fe-7b52-4d98-b06b-e65b6f1c93b2-0059cd54","c28ca6fe-7b52-4d98-b06b-e65b6f1c93b2-0059cdbc","c28ca6fe-7b52-4d98-b06b-e65b6f1c93b2-0059cdc7","c28ca6fe-7b52-4d98-b06b-e65b6f1c93b2-0059cdce"],"revitId": ["5690043","5690056","5690085","5690090","5690097","5746251","5878331","5878337","5878409","5878432","5690395","5690400","5690407","5727781","5727807","5727838","5727840","5746188","5862007","5885268","5885372","5885383","5885390"],"properties": [{"图像": "<无>","底部高程": "3240.00 mm","顶部高程": "3340.00 mm","尺寸": "400 mmx100 mm","标记": "2261","标高前缀": "BL","桥架类型": "CT","创建的阶段": "新构造","拆除的阶段": "无","水平对正": "中心","垂直对正": "中","宽度": "400 mm","高度": "100 mm","参照标高": "管线综合","偏移": "3290.00 mm","开始偏移": "3290.00 mm","端点偏移": "3290.00 mm","长度": "834.04 mm"},{"图像": "<无>","底部高程": "3350.00 mm","顶部高程": "3450.00 mm","尺寸": "200 mmx100 mm","标记": "2262","标高前缀": "BL","桥架类型": "CT","创建的阶段": "新构造","拆除的阶段": "无","水平对正": "中心","垂直对正": "中","宽度": "200 mm","高度": "100 mm","参照标高": "管线综合","偏移": "3400.00 mm","开始偏移": "3400.00 mm","端点偏移": "3400.00 mm","长度": "2555.39 mm"},{"图像": "<无>","底部高程": "3350.00 mm","顶部高程": "3450.00 mm","尺寸": "200 mmx100 mm","标记": "2264","标高前缀": "BL","桥架类型": "CT","创建的阶段": "新构造","拆除的阶段": "无","水平对正": "中心","垂直对正": "中","宽度": "200 mm","高度": "100 mm","参照标高": "管线综合","偏移": "3400.00 mm","开始偏移": "3400.00 mm","端点偏移": "3400.00 mm","长度": "20043.04 mm"},{"图像": "<无>","底部高程": "3350.00 mm","顶部高程": "3450.00 mm","尺寸": "200 mmx100 mm","标记": "2265","标高前缀": "BL","桥架类型": "CT","创建的阶段": "新构造","拆除的阶段": "无","水平对正": "中心","垂直对正": "中","宽度": "200 mm","高度": "100 mm","参照标高": "管线综合","偏移": "3400.00 mm","开始偏移": "3400.00 mm","端点偏移": "3400.00 mm","长度": "18723.21 mm"},{"图像": "<无>","底部高程": "3240.00 mm","顶部高程": "3340.00 mm","尺寸": "200 mmx100 mm","标记": "2266","创建的阶段": "新构造","拆除的阶段": "无","水平对正": "中心","垂直对正": "中","宽度": "200 mm","高度": "100 mm","参照标高": "管线综合","偏移": "3290.00 mm","开始偏移": "3290.00 mm","端点偏移": "3290.00 mm","长度": "249.24 mm"},{"图像": "<无>","底部高程": "3350.00 mm","顶部高程": "3450.00 mm","尺寸": "200 mmx100 mm","标记": "2284","标高前缀": "BL","桥架类型": "CT","创建的阶段": "新构造","拆除的阶段": "无","水平对正": "中心","垂直对正": "中","宽度": "200 mm","高度": "100 mm","参照标高": "管线综合","偏移": "3400.00 mm","开始偏移": "3400.00 mm","端点偏移": "3400.00 mm","长度": "18723.21 mm"},{"图像": "<无>","底部高程": "3350.00 mm","顶部高程": "3450.00 mm","尺寸": "200 mmx100 mm","标记": "2293","标高前缀": "BL","桥架类型": "CT","创建的阶段": "新构造","拆除的阶段": "无","水平对正": "中心","垂直对正": "中","宽度": "200 mm","高度": "100 mm","参照标高": "管线综合","偏移": "3400.00 mm","开始偏移": "3400.00 mm","端点偏移": "3400.00 mm","长度": "14616.67 mm"},{"图像": "<无>","底部高程": "3240.00 mm","顶部高程": "3340.00 mm","尺寸": "200 mmx100 mm","标记": "2294","标高前缀": "BL","桥架类型": "CT","创建的阶段": "新构造","拆除的阶段": "无","水平对正": "中心","垂直对正": "中","宽度": "200 mm","高度": "100 mm","参照标高": "管线综合","偏移": "3290.00 mm","开始偏移": "3290.00 mm","端点偏移": "3290.00 mm","长度": "711.98 mm"},{"图像": "<无>","底部高程": "3300.29 mm","顶部高程": "3389.71 mm","尺寸": "200 mmx100 mm","标记": "2295","创建的阶段": "新构造","拆除的阶段": "无","水平对正": "中心","垂直对正": "中","宽度": "200 mm","高度": "100 mm","参照标高": "管线综合","偏移": "3346.41 mm","开始偏移": "3346.41 mm","端点偏移": "3343.59 mm","长度": "5.64 mm"},{"图像": "<无>","底部高程": "3300.29 mm","顶部高程": "3389.71 mm","尺寸": "200 mmx100 mm","标记": "2296","创建的阶段": "新构造","拆除的阶段": "无","水平对正": "中心","垂直对正": "中","宽度": "200 mm","高度": "100 mm","参照标高": "管线综合","偏移": "3343.59 mm","开始偏移": "3343.59 mm","端点偏移": "3346.41 mm","长度": "5.64 mm"},{"图像": "<无>","底部高程": "3350.00 mm","顶部高程": "3450.00 mm","尺寸": "100 mmx100 mm","标记": "2270","标高前缀": "BL","桥架类型": "CT","创建的阶段": "新构造","拆除的阶段": "无","水平对正": "中心","垂直对正": "中","宽度": "100 mm","高度": "100 mm","参照标高": "管线综合","偏移": "3400.00 mm","开始偏移": "3400.00 mm","端点偏移": "3400.00 mm","长度": "10853.27 mm"},{"图像": "<无>","底部高程": "3350.00 mm","顶部高程": "3450.00 mm","尺寸": "100 mmx100 mm","标记": "2271","标高前缀": "BL","桥架类型": "CT","创建的阶段": "新构造","拆除的阶段": "无","水平对正": "中心","垂直对正": "中","宽度": "100 mm","高度": "100 mm","参照标高": "管线综合","偏移": "3400.00 mm","开始偏移": "3400.00 mm","端点偏移": "3400.00 mm","长度": "18507.78 mm"},{"图像": "<无>","底部高程": "3230.00 mm","顶部高程": "3330.00 mm","尺寸": "100 mmx100 mm","标记": "2272","创建的阶段": "新构造","拆除的阶段": "无","水平对正": "中心","垂直对正": "中","宽度": "100 mm","高度": "100 mm","参照标高": "管线综合","偏移": "3280.00 mm","开始偏移": "3280.00 mm","端点偏移": "3280.00 mm","长度": "1368.66 mm"},{"图像": "<无>","底部高程": "3230.00 mm","顶部高程": "3330.00 mm","尺寸": "100 mmx100 mm","标记": "2273","标高前缀": "BL","桥架类型": "CT","创建的阶段": "新构造","拆除的阶段": "无","水平对正": "中心","垂直对正": "中","宽度": "100 mm","高度": "100 mm","参照标高": "管线综合","偏移": "3280.00 mm","开始偏移": "3280.00 mm","端点偏移": "3280.00 mm","长度": "4294.11 mm"},{"图像": "<无>","底部高程": "3350.00 mm","顶部高程": "3450.00 mm","尺寸": "100 mmx100 mm","标记": "2274","标高前缀": "BL","桥架类型": "CT","创建的阶段": "新构造","拆除的阶段": "无","水平对正": "中心","垂直对正": "中","宽度": "100 mm","高度": "100 mm","参照标高": "管线综合","偏移": "3400.00 mm","开始偏移": "3400.00 mm","端点偏移": "3400.00 mm","长度": "18507.78 mm"},{"图像": "<无>","底部高程": "3350.00 mm","顶部高程": "3450.00 mm","尺寸": "100 mmx100 mm","标记": "2275","标高前缀": "BL","桥架类型": "CT","创建的阶段": "新构造","拆除的阶段": "无","水平对正": "中心","垂直对正": "中","宽度": "100 mm","高度": "100 mm","参照标高": "管线综合","偏移": "3400.00 mm","开始偏移": "3400.00 mm","端点偏移": "3400.00 mm","长度": "10853.27 mm"},{"图像": "<无>","底部高程": "3350.00 mm","顶部高程": "3450.00 mm","尺寸": "100 mmx100 mm","标记": "2276","标高前缀": "BL","桥架类型": "CT","创建的阶段": "新构造","拆除的阶段": "无","水平对正": "中心","垂直对正": "中","宽度": "100 mm","高度": "100 mm","参照标高": "管线综合","偏移": "3400.00 mm","开始偏移": "3400.00 mm","端点偏移": "3400.00 mm","长度": "8384.77 mm"},{"图像": "<无>","底部高程": "3350.00 mm","顶部高程": "3450.00 mm","尺寸": "100 mmx100 mm","标记": "2282","标高前缀": "BL","桥架类型": "CT","创建的阶段": "新构造","拆除的阶段": "无","水平对正": "中心","垂直对正": "中","宽度": "100 mm","高度": "100 mm","参照标高": "管线综合","偏移": "3400.00 mm","开始偏移": "3400.00 mm","端点偏移": "3400.00 mm","长度": "18507.78 mm"},{"图像": "<无>","底部高程": "3230.00 mm","顶部高程": "3330.00 mm","尺寸": "100 mmx100 mm","标记": "2289","创建的阶段": "新构造","拆除的阶段": "无","水平对正": "中心","垂直对正": "中","宽度": "100 mm","高度": "100 mm","参照标高": "管线综合","偏移": "3280.00 mm","开始偏移": "3280.00 mm","端点偏移": "3280.00 mm","长度": "224.62 mm"},{"图像": "<无>","底部高程": "3350.00 mm","顶部高程": "3450.00 mm","尺寸": "100 mmx100 mm","标记": "2297","标高前缀": "BL","桥架类型": "CT","创建的阶段": "新构造","拆除的阶段": "无","水平对正": "中心","垂直对正": "中","宽度": "100 mm","高度": "100 mm","参照标高": "管线综合","偏移": "3400.00 mm","开始偏移": "3400.00 mm","端点偏移": "3400.00 mm","长度": "601.77 mm"},{"图像": "<无>","底部高程": "3350.00 mm","顶部高程": "3450.00 mm","尺寸": "100 mmx100 mm","标记": "2300","标高前缀": "BL","桥架类型": "CT","创建的阶段": "新构造","拆除的阶段": "无","水平对正": "中心","垂直对正": "中","宽度": "100 mm","高度": "100 mm","参照标高": "管线综合","偏移": "3400.00 mm","开始偏移": "3400.00 mm","端点偏移": "3400.00 mm","长度": "4852.49 mm"},{"图像": "<无>","底部高程": "3276.89 mm","顶部高程": "3403.11 mm","尺寸": "100 mmx100 mm","标记": "2301","创建的阶段": "新构造","拆除的阶段": "无","水平对正": "中心","垂直对正": "中","宽度": "100 mm","高度": "100 mm","参照标高": "管线综合","偏移": "3359.81 mm","开始偏移": "3359.81 mm","端点偏移": "3320.19 mm","长度": "79.23 mm"},{"图像": "<无>","底部高程": "3276.89 mm","顶部高程": "3403.11 mm","尺寸": "100 mmx100 mm","标记": "2302","创建的阶段": "新构造","拆除的阶段": "无","水平对正": "中心","垂直对正": "中","宽度": "100 mm","高度": "100 mm","参照标高": "管线综合","偏移": "3359.81 mm","开始偏移": "3359.81 mm","端点偏移": "3320.19 mm","长度": "79.23 mm"}]}

1. id[] : 构件 id 数组


JSON

 {"scene": 0,"asset": {"generator": "gltf-samples-generator","version": "2.0"},"scenes": [{"name": "-1","nodes": [0]}],"nodes": [{"name": "-1","mesh": 0}],"meshes": [{"name": "-1","primitives": [{"attributes": {"POSITION": 0,"NORMAL": 1,"_BATCHID": 2},"indices": 3,"material": 0}]}],"materials": [{"name": "MaterialNode_8355711_0","pbrMetallicRoughness": {"roughnessFactor": 1.0,"baseColorFactor": [0.498039216,0.498039216,0.498039216,1.0],"metallicFactor": 0.0},"alphaMode": "OPAQUE","doubleSided": true}],"accessors": [{"min": [21.8017368,21.23,-39.46816],"max": [42.94478,21.45,-19.6449471],"bufferView": 0,"byteOffset": 0,"componentType": 5126,"count": 1104,"type": "VEC3"},{"min": [-1.0,-1.0,-1.0],"max": [1.0,1.0,1.0],"bufferView": 0,"byteOffset": 12,"componentType": 5126,"count": 1104,"type": "VEC3"},{"min": [0.0],"max": [22.0],"bufferView": 0,"byteOffset": 24,"componentType": 5126,"count": 1104,"type": "SCALAR"},{"min": [0],"max": [1103],"bufferView": 1,"byteOffset": 0,"componentType": 5123,"count": 1932,"type": "SCALAR"}],"bufferViews": [{"buffer": 0,"byteLength": 30912,"byteOffset": 0,"target": 34962,"byteStride": 28},{"buffer": 0,"byteLength": 3864,"byteOffset": 30912,"target": 34963}],"buffers": [{"byteLength": 34776}]}

b3dm ~ ( Batched 3D Model )相关推荐

  1. 一起学WP7 XNA游戏开发(八. 让3d model动起来)

    如何让3d model动起来,其实就是要给model的bone设置动作,这样整个model就会动起来了. 一.获取Bones 在fbx文件中可以看到所有bones的名称,这样就可以通过名称来获取到bo ...

  2. 人脸检测--Face Detection with End-to-End Integration of a ConvNet and a 3D Model

    Face Detection with End-to-End Integration of a ConvNet and a 3D Model ECCV2016 mxnet code:https://g ...

  3. 【论文阅读】6-Automatic 3D Model Construction for Turn-Table Sequences

    [论文阅读]6-Automatic 3D Model Construction for Turn-Table Sequences 1.知识点回顾 2.论文阅读 2.1.input& outpu ...

  4. 视频教程-【CVPR2018】3D Pose Estimation and 3D Model Retriev-强化学习

    [CVPR2018]3D Pose Estimation and 3D Model Retriev 从事IT领域8年,精通计算机视觉. 吴勤明 ¥50.00 立即订阅 扫码下载「CSDN程序员学院AP ...

  5. 碗状碎块三维模型的下载(.PLY格式)3D model file with Bowl-shaped Broken Piece (.ply format)

    碗状碎块三维模型的下载(.PLY格式) 3D model file with Bowl-shaped Broken Piece (.ply format) 上传的碗状碎块共有两组,这些碎块在断裂曲面处 ...

  6. Face Swapping under Large Pose Variations: a 3D Model Based Approach论文阅读笔记

    题目:Face Swapping under Large Pose Variations: a 3D Model Based Approach 翻译:大姿态变化下的人脸交换:一种基于三维模型的方法 摘 ...

  7. knot3d for android,Modified 3D Model of a Facular KNOT

    摘要: The paper presents a modified version of a previously published 3D model of the solar facular kn ...

  8. Altium Designer导入3D模型出现:cannot load 3D model from file警告

    这可把我给烦的呀,一整天都在想办法解决这个问题,前前后后安装了8遍,愣是在最后一次才解决.软件的安装都显示破解OK,但是一到封装的时候,想导入3D模型,就显示Cannot load 3D model ...

  9. 三维浏览软件-JT2GO / 3D Model Viewer JT2GO

    1.       JT2GO介绍 JT2Go浏览器是西门子工业自动化业务部旗下机构.全球领先的产品生命周期管理(PLM)软件和服务提供商Siemens PLM Software推出的三维可视化解决方案 ...

最新文章

  1. 深度隐式表达:为什么不用mesh,点云,体素等表示方法?
  2. 学习完Ajax的总结
  3. C++中如何访问全局变量和全局函数
  4. SpringBoot和FreeMarker整合
  5. sqlserver查看用户名密码_php 连接sql server数据库
  6. java查询多条_Mybatis查询多条记录并返回List集合的方法
  7. 管壁式换热器cad图纸_民勤图纸管板加工加工
  8. 博图v16组态wincc_西门子WinCC与S71200OPC通讯方法
  9. AngularJS: 自定义指令与控制器数据交互
  10. R 学习笔记《二》 R语言初学者指南
  11. 光盘文件格式-udf、iso9660、Joliet、Romeo
  12. Excel如何一次性将多行多列表格颠倒行顺序
  13. Facebook公司:如何删掉960万句“脏话”?
  14. LINUS TORVALDS 语录 TOP 10
  15. Linux设备驱动模型
  16. 基于SVM的车牌识别
  17. 软件机器人实现一键报税,即使没有开发接口,纳税申报也照样方便、快捷
  18. 关于端口1433连接失败问题
  19. 趣味数学:解24点游戏小技巧
  20. 测试工程师的未来在哪里?迷茫的看过来...

热门文章

  1. 滴滴出行2016校招编程题
  2. kettle连接数据库报错:Error connecting to database: (using class org.gjt.mm.mysql.Driver) Could not create
  3. Django Swagger文档库drf-spectacular
  4. NVMe-MI 时代的NVMe SSD监控和管理
  5. Notepad++增加读取二进制文件的功能——HexEditor的所有
  6. win7开启超级管理员账户(Administrator)
  7. IT项目管理总结:第七章 项目成本管理
  8. 百度网盘中直接双击编辑的PPT关闭后,找不到了。
  9. iOS 网络传输数据安全以及常用的加密算法使用
  10. typescript函数和类的基础