C++学习(七十一)3Dtiles glTF glb b3dm
一、glTF、glb
glTF表示了渲染一个模型的几何数据、纹理数据、材质数据、元数据等。glTF一般用于表示一个具体模型,比如汽车、树木等,不会用于表示一个数字城市,数字城市一般用3DTiles来表示。
glTF的整体设计,概括有四点:第一,数据块(Buffer)连续,保证了读写性能;第二,提供了视图(View)和访问器(Accessor)的概念,在不损失数据块完整性的前提下提供类型信息和读取规范,保证了兼容性;第三,逻辑层和数据层分离,两者尽量分离,比如用户想要增加一种风格,只会牵连到逻辑层的调整,不会影响数据层的读写,保证了独立性;第四,逻辑层,也就是业务层是JSON形式,保证了扩展性。
GLTF代表Graphics Language Transmission Format(图形语言传输格式)。这种跨平台格式已成为Web上的3D对象标准。它由OpenGL和Vulkan背后的3D图形标准组织Khronos所定义,这使得GLTF基本上成为3D模型的JPG格式:Web导出的通用标准。
A-Frame和ThreeJS原生支持GLTF。尽管一些3D Web框架支持特定于平台的模型格式,如FBX和OBJ,但几乎每个框架都支持GLTF。如果有人要为你提供3D模型,你可以请求他们提供GLTF格式的版本。
GLB是GLTF模型的⼆进制⽂件格式表⽰。GLTF的node层次结构、mesh、材质、动画等信息都⽤⼆进制信息表⽰。
GLB⽂件主要包括Header和Chunks两部分,⽂件结构⽰意图如下:
Header
GLB⽂件的头部包含3部分,每部分由4 bytes组成,共12 bytes:
unit32 magic - GLTF标识符,数值为 0x46546C67,gltf的ASCII码值
unit32 version - GLTF版本号
unit32 length - GLB⽂件的⼤⼩,包括header和所有chunks的字节长度
Chunks
chunkLength - chunkData的长度
chunkType - chunk的类型,主要有JOSN和BIN(对应我们平时的scene.gltf和scene.bin的数据)
chunkData - chunk的binary数据
二、3D Tiles
是用于流式传输大规模异构3D地理空间数据集的开放规范。为了扩展Cesium的地形和图像流,3D Tiles将用于流式传输3D内容,包括建筑物,树木,点云和矢量数据。
3D Tiles的主要目的是改善大规模异构数据集的流和渲染性能。3D Tiles的基础是一种空间数据结构,它支持层次结构细节级别(HLOD),因此只有可见的图块才会被流式传输 - 并且只有那些对于给定3D视图最重要的图块。平铺有效载荷可以是二进制和上下文感知压缩的,例如,使用Open3DGC或oct编码。
在Cesium中有开源实现。
3D Tiles在glTF的逻辑层,也就是JSON部分增加了FeatureTable和BatchTable,以及LOD(tileset)概念,并对应提供了header(二进制存储)。从数据规范角度来看,继承了glTF优秀的部分,同时考虑了倾斜,点云,后续也会支持OSM,从数据类型的支持上也比较到位。
三、b3dm
Cesium的Batched 3D Tiles Data的简称,它是3DTiles规范的一部分,本质上b3dm也是使用glTF来存放数据的。用于表示3DTiles的每个瓦片(3d-tiles/specification/TileFormats/Batched3DModel at main · CesiumGS/3d-tiles · GitHub)。
C++学习(七十一)3Dtiles glTF glb b3dm相关推荐
- springboot学习(七十一)解决问题:the URL contained a potentially malicious String “;“
访问某个请求报错: org.springframework.security.web.firewall.RequestRejectedException: The request was reject ...
- JavaScript学习(七十一)—call、apply、bind学习总结
JavaScript学习(七十一)-call.apply.bind学习总结 一.call方法 call方法调用一个对象,简单的理解为调用函数的方式,但是它可以改变函数的this指向 二.apply() ...
- Apache Nutch 1.3 学习笔记十一(页面评分机制 OPIC)
1. Nutch 1.3 的页面评分机制 Nutch1.3目前默认还是使用OPIC作为其网页分数算法,但其之后,已经引入了PageRank-like算法,以弥补OPIC算法的不足,目前OPIC算法还是 ...
- 从零开始学习jQuery (十一) 实战表单验证与自动完成提示插件
本系列文章导航 从零开始学习jQuery (一) 开天辟地入门篇 从零开始学习jQuery (二) 万能的选择器 从零开始学习jQuery (三) 管理jQuery包装集 从零开始学习jQuery ( ...
- 七十一、Python | Leetcode字符串系列(上篇)
@Author:Runsen @Date:2020/7/3 人生最重要的不是所站的位置,而是内心所朝的方向.只要我在每篇博文中写得自己体会,修炼身心:在每天的不断重复学习中,耐住寂寞,练就真功,不畏艰 ...
- jQuery框架学习第十一天:实战jQuery表单验证及jQuery自动完成提示插件
jQuery框架学习第一天:开始认识jQuery jQuery框架学习第二天:jQuery中万能的选择器 jQuery框架学习第三天:如何管理jQuery包装集 jQuery框架学习第四天:使用jQ ...
- Apache Nutch 1.3 学习笔记十一(页面评分机制 LinkRank 介绍)
下面是Google翻译的http://wiki.apache.org/nutch/NewScoring内容,是关于Nutch 新的链接分数算法的说明,有点类似于Google的PageRank,这里有其 ...
- 【正点原子Linux连载】第七十一章 Linux 4G通信实验 -摘自【正点原子】I.MX6U嵌入式Linux驱动开发指南V1.0
1)实验平台:正点原子阿尔法Linux开发板 2)平台购买地址:https://item.taobao.com/item.htm?id=603672744434 2)全套实验源码+手册+视频下载地址: ...
- 华为鸿蒙系统HarmonyOS学习之十一:华为个人开发者账号注册步骤及方法
华为鸿蒙系统HarmonyOS学习之十一:华为个人开发者账号注册步骤及方法 华为开发者联盟是华为面向生态伙伴的开放合作平台,旨在协调华为全球化平台和产业链资源,从应用推广.开发支持.应用变现.品牌宣传 ...
- 【CAD开发】glTF和b3dm文件格式读取(C++,Python)
文章目录 1.简介 1.1 层级结构 1.2 术语定义 2.glTF文件预览 2.1 VSCode(v2.0) 2.2 glTF Viewer(v2.0, js) 2.3 babylon.js(v2. ...
最新文章
- 【Java】MD5字符串的加密解密
- 清除css,js,img的浏览器缓存
- 决定你人生命运的10年,你做了什么?
- Starling实现的硬皮翻书效果
- php调用成员函数错误,PHP致命错误:在非对象上调用成员函数exec...
- 使用servlet原生API作为参数
- PHP168整站数据库结构说明,PHP168
- java 通过经纬度计算巨鹿,全国经纬度汇总表(全)
- 工科数学分析寒假预习day4 更序问题和级数乘法
- 台式计算机cpu允许温度,台式机cpu温度多少正常 台式电脑工作时温度范围
- python中sqrt函数用法_Python : sqrt() 函数
- mysql与gbase获取行号_mysql/gbase数据库全库库表记录数统计
- 三十六洞天 七十二福地
- 32.768khz晶振在手表中的作用
- 数据库范式(normalization)
- 问题 D: 扑克牌排序(结构体)
- 为何机房要升级动环监控系统?
- ios framework 开发 之 实战 一,合并失败了
- 滴滴外卖开启连锁模式,距离全国连锁还有多远?
- WZOI-219短信计费