glb数据格式

news2024/9/24 21:37:40

glb数据格式

glb 文件格式只包含一个glb 文件,文件按照二进制存储,占空间小

浏览

浏览glb工具的很多,ccs,3D查看器等都可以,不安装软件的话用下面网页加载就可以,免费

glTF Viewer (donmccurdy.com)

glbxz.com 模型网

GLTF 编辑器 -NSDT

image-20240916132645849

参考资料

完整的介绍文档可以参考以下几个

GLB文件 (sarkuya.com)

glTF 2.0 - Blender 4.2 手册

GLB (fileformat.com)

glTF Tutorial | glTF-Tutorials (khronos.org)

文件格式

开始正文介绍,二进制的glb文件打开后结构如下:

image-20240916134704827

整体结构的包含一个文件头,一个Json的chunk,一个bin的chunk存储图像,动画,纹理等

header

头部数据长度12个字节

#读取12个字节,按照小端,转换为无符号整数
header = f.read(12)
magic, version, length = struct.unpack('<III', header)
名称说明数值解释
magic魔术字0x46546C67对应ascII码glTF
version版本2GITF的版本
length长度746776包括文件头的文件总长度

chunk0

一个glb文件可以存在多个chunk,但是chunk0是必须的,其格式是固定的

# 读取8个字节,存储字节总长度和chunk类型,按照字节长度截取数据存储为chunkdata
chunk_header = f.read(8)
chunk_length, chunk_type = struct.unpack('<II', chunk_header)
if chunk_type != 0x4E4F534A:
    raise ValueError("Expected JSON chunk.")

json_chunk = f.read(chunk_length)
gltf_data = json.loads(json_chunk.decode('utf-8'))
名称说明数值
chunkLength字节总长度7420(测试值)
chunkType数据类型0x4E4F534A,对应ascII是JSON
chunkData数据JSON数据
#使用该指令可以将无符号整数转ascII,对应值是JSON
chunk_type.to_bytes(4, byteorder='little').decode('ascii')

chunkData

img

已知数据格式为JSON,所以将数据按照utf-8编码转换为对应的数据JSON数据,并打印出来

gltf_data = json.loads(json_chunk.decode('utf-8'))
print(json.dumps(gltf_data, indent=4))

对应打印值对应如下:

image-20240916141139346

接下来对JSON结构进行解释,其加载顺序对应是scenes、nodes、meshes、accessors、bufferViews、buffers、materials、textures、images。其中每个mesh包括一个bufferViews和一个materials。每一层的递进都有数组下标来确定,结构存储在buffer中,纹理存储在image中

名称说明包含声明
scenes场景nodes
nodes节点mesh、translation、chidren,camera、skin
meshes网格attributes、indices、material网格所需数据
accessors访问器bufferView、componentType、count、type缓冲器索引,数据类型,大小
bufferViews缓冲器buffer、byteOffset、byteLength、targetbuffer对应得位置
buffers缓冲数据byteLength,uri、namebuffer的字节长度
materials材质baseColorTexture、metallicFactor、roughnessFactor、extensions材质参数,以及纹理索引
textures纹理source,sampler照片索引和采样器索引
images照片name、uri、bufferView、mimeType纹理文件索引,文件格式
samplers采样器magFilter、minFilter放大缩小时滤波器

scenes

对应模型得场景,一般模型一个场景,即默认场景;

每个场景包含一个node字段,指定了sence的根节点,

下图包含一个scene对象,该对应指定了一个索引为2的node节点

image-20240916152026773

nodes

节点,所有的节点构成scene,可以包含网格mesh、变换translation,子节点children,相机camera、纹理skin等

名称说明
mesh网格信息 存放网格索引
children子节点,该节点包含的子节点
translation平移信息
rotation旋转信息,四元数
scale缩放信息
name节点名
matrix局部变换矩阵,16浮点矩阵数组,平移,旋转,尺度

下图node包含

一个mesh,其索引值为0

一个子节点children,索引为0,并且包含了其变化参数translation,对应节点名称为rtc

一个子节点children,索引为1,并且包含了对应姿态matrix,对应节点名称为rootNode

所以根据使用得关系是rootnode给了rtc一个属性matrix,然后rtc给了mesh一个属性translation,等于mesh继承了器各个属性

img

image-20240916152107240

meshes

meshes网格,包含构建一个网格所需要的数据"primitives"数组,,其包含的属性值有

  • attributes:包含"NORMAL"、“POSITION”、“TEXCOORD_0”、“TANGENT”、“JOINTS_0”、“WEIGHTS_0”等数据的索引
  • indices:存储属性accessors的数组索引
  • material:存储属性material材质的数组索引
名称说明,对应于accessors索引
NORMAL顶点的法线
POSITION顶点的位置
TEXCOORD_0顶点的uv坐标
TANGENT顶点的切线
JOINTS_0顶点受骨骼节点的约束
WEIGHTS_0顶点受骨骼节点约束的权重

该mesh包含7个网格,其中第一个网格包含顶点位置索引0,对应uv坐标索引1;对应accessors索引2,材质索引0

image-20240916153256371

accessors

accessors访问器:是访问buffer的中间件,是bufferView和mesh之间的桥梁,表明bufferView的索引

名称说明
bufferView在bufferViews中的索引
componentType数据类型
5120:byte; 5121:ubyte;5122:short;
5123:ushort;5124:int; 5125:uint;
5126:float; 5130:double
count数据个数
type数据类型,
‘SCALAR’: 1,标量
‘VEC2’: 2,‘VEC3’: 3,‘VEC4’: 4, 对应n维向量
‘MAT2’: 4,‘MAT3’: 9‘MAT4’: 16, //n2维矩阵
max所有的数据中最大值
min所有的数据中最小值

该accessors 访问器包含多个中间件,其中
第一个中间件,对应bufferviews索引1,float类型,共9185个三维向量数据,最大最小值对应如下

第二个中间件,对应bufferviews索引2,float类型,共9185个二维向量数据,最大最小值对应如下

第三个中间件,对应bufferviews索引3,ushort类型,共18297个标量数据,最大最小值对应如下

image-20240916162112679

bufferViews

bufferViews表明数据在buffer中的具体位置

名称说明
bufferbuffer数据的索引
byteOffsetbuffer的字节偏移量
byteLengthbuffer的字节长度
target缓冲类型,
顶点属性 vertex attributes,34962,代表ARRAY_BUFFER
顶点索引 vertex indices, 34963,代表ELEMENT_ARRAY_BUFFER

该bufferViews包含多个buffer

第一个buffer,数据索引0,偏移量0,字节长度56332

第二个buffer,数据索引0,偏移量56332,字节长度110220,缓冲类型:属性

第三个buffer,数据索引0,偏移量166552,字节长度73480,缓冲类型:属性

第四个buffer,数据索引0,偏移量240032,字节长度36594,缓冲类型:属性

image-20240916162112679

buffers

buffers是buffer数组,每一个buffer存放真是数据,通常包含bytelength、uri、name字段,后两个不是必须的,将各属性打包成字节,通过偏移地址标记

名称说明
byteLengthbuffer字节长度
uribuffer的二进制文件地址(非必须)
name名称(非必须)

该buffers包含一个buffer

该buffer的字节长度为739328

image-20240916222858636

materials

materials包含了模型绘制时需要的纹理信息

基础颜色必须包含使用 sRGB 光电传递函数编码的 8 位值,因此 RGB 值在用于任何计算之前必须解码为实际线性值。

金属度和粗糙度属性的纹理打包纹理中。其绿色通道包含粗糙度值,蓝色通道包含金属度值。此纹理必须使用线性传递函数进行编码,并且每个通道可以使用超过 8 位的位

名称说明
pbrMetallicRoughnessPBR相关参数
baseColorTexture基础颜色,index对应texture的索引
metallicFactor0~1,材质的金属度
roughnessFactor0~1,材质的粗糙度
extensions扩展库属性

扩展属性

名称说明
KHR_draco_mesh_compressionglTF 格式几何压缩库
KHR_lights_punctual场景灯光,光源
KHR_materials_anisotropy材料各项异性
KHR_materials_clearcoat材料透明层
KHR_materials_emissive_strength材料发光的颜色和强度
KHR_materials_ior材料折射率
KHR_materials_iridescence材料薄膜厚度和折射率
KHR_materials_sheen材料光泽
KHR_materials_specular材料粗糙度中的镜面反射和镜面颜色
KHR_materials_transmission薄壳材料的光学透明度
KHR_materials_unlit无光照着色模型

该材料属性,其包含多个PBR属性,

第一个PBR金属模型粗糙度,基础颜色索引0,金属度0,粗糙度0.5,扩展属性是无光照着色模型

第二个PBR金属模型粗糙度,基础颜色索引1,金属度0,粗糙度0.5,扩展属性是无光照着色模型

第三个PBR金属模型粗糙度,基础颜色索引2,金属度0,粗糙度0.5,扩展属性是无光照着色模型

image-20240916223150363

textures

textures对应纹理信息,用于渲染对象的:纹理由材料引用以定义基本物体的颜色以及物理特性

包含两个参数source 对应纹理照片;sampler采样器

名称说明
source照片纹理
sampler采样器

textures包含多个纹理

第一个纹理,照片索引0,采样器索引0

第二个纹理,照片索引1,采样器索引1

第三个纹理,照片索引2,采样器索引2

image-20240916232759087

images

图片资源

名称说明
name名称
uri指向纹理文件(对glb文件为空,通过给出的"bufferView"的索引)
bufferView纹理对应的索引
mimeType图片格式

该images图片资源包括7个

图片1,图片索引0,图片格式jpeg

图片2,图片索引4,图片格式jpeg

图片3,图片索引8,图片格式jpeg

image-20240916233748518

samplers

采样器,对应照片的滤波和环绕方式

名称说明
magFilter模型放大时,纹理滤波方式
minFilter模型缩小时,纹理滤波方式
wrapS纹理环绕方式
wrapT纹理环绕方式

滤波方式

名称说明
GL_NEAREST9728最临近插值(临近那个就是那个,单色)
GL_LINEAR9729线性插值(使用周围多个线性插值,混合色)
GL_NEAREST_MIPMAP_NEAREST9984最邻近的mipmap级别,临近插值采样
GL_LINEAR_MIPMAP_NEAREST9985最邻近的mipmap级别,线性插值采样
GL_NEAREST_MIPMAP_LINEAR9986两个最匹配像素的mipmap间线性插值,使用临近插值采样
GL_LINEAR_MIPMAP_LINEAR9987两个最匹配像素的mipmap间线性插值,使用线性插值采样

环绕方式

对纹理坐标范围超出对应纹理时的处理方式,即就是纹理坐标范围是0~1,当纹理坐标超出该值的处理方式

名称说明
GL_CLAMP_TO_EDGE33071忽略边缘,超出部分直接使用边缘纹理,1.1处纹理使用1
GL_MIRRORED_REPEAT33648重复纹理,不过重复的图片是镜像方式的
GL_REPEAT10497重复纹理,即1.1处纹理和0.1处纹理一致

该处的采样器集合samplers,包含多个采样器,其采样器对应值一致

模型放大时滤波器使用线性插值,模型缩小时滤波器使用线性插值。

image-20240916234810978

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2161508.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

uniapp小程序中通过uni.setClipboardData实现复制功能无效的原因和解决方案

// 复制下载链接const shareFile (filePath) > {const pdfUrl 复制内容uni.showModal({title: 下载提示,content: 请复制链接到浏览器中下载,confirmColor: #eb2444,confirmText: 复制链接,success(res) {if (res.confirm) {uni.setClipboardData({data: pdfUrl, // url地…

C++: unordered系列关联式容器

目录 1. unordered系列关联式容器1.1 unordered_map1.2 unordered_set 2. 哈希概念3. 哈希冲突4. 闭散列5. 开散列 博客主页: 酷酷学 感谢关注!!! 正文开始 1. unordered系列关联式容器 在C98中&#xff0c;STL提供了底层为红黑树结构的一系列关联式容器&#xff0c;在查询时…

【笔记】自动驾驶预测与决策规划_Part4_时空联合规划

文章目录 0. 前言1. 时空联合规划的基本概念1.1 时空分离方法1.2 时空联合方法 2.基于搜索的时空联合规划 &#xff08;Hybrid A* &#xff09;2.1 基于Hybrid A* 的时空联合规划建模2.2 构建三维时空联合地图2.3 基于Hybrid A*的时空节点扩展2.4 Hybrid A* &#xff1a;时空节…

多线程——“死锁”

目录 前言 一、一个线程&#xff0c;一把锁 1.问题介绍 2.可重入锁 二、两个线程&#xff0c;两把锁 1.问题介绍 2.解决方式 三、N个线程&#xff0c;M把锁 1.哲学家就餐问题 2.解决方式 结尾 前言 “死锁”是多线程代码中一类常见的问题&#xff0c;加锁是能解决线…

plt的简单使用

目录 介绍示例 介绍 plt 是 Python 中 Matplotlib 库的一个常用别名&#xff0c;它表示 pyplot&#xff0c;这是一个用于创建图形和图形的可视化表示的工具。下面是一些 plt 函数的详解和示例&#xff0c;以帮助大家理解和使用。 示例 示例1&#xff1a; import matplotlib…

AV1 Bitstream Decoding Process Specification--[9]:语法结构语义-5

原文地址&#xff1a;https://aomediacodec.github.io/av1-spec/av1-spec.pdf 没有梯子的下载地址&#xff1a;AV1 Bitstream & Decoding Process Specification摘要&#xff1a;这份文档定义了开放媒体联盟&#xff08;Alliance for Open Media&#xff09;AV1视频编解码…

loadrunner个人笔记

创建场景配置&#xff1a; 两个同时 去四&#xff1a;日志、时间、模拟、其他自动事务 加一&#xff1a;首选项 1、写脚本&#xff0c;沟通官方、文件打印扫描 MFI-sw.support.gsd.imsc.sda.globalopentext.com support.casemicrofocus.com 支持资源 | Micro Focus | OpenT…

【毕业论文+源码】基于ASP的课程指导平台的开发

引 言 随着全球信息化技术的兴起&#xff0c;特别是Internet的日益普及&#xff0c;解决了信息Internet上传递的问题&#xff0c;建立了一个组织得很好的信息结构框架&#xff0c;使得Internet用户能够在Internet上的任何一个终端&#xff0c;以一种简单、统一的方式来访问超…

Leetcode Hot 100刷题记录 -Day18(反转链表)

反转链表&#xff1a; 问题描述&#xff1a; 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,2,1]示例 2&#xff1a; 输入&#xff1a;head [1,2] 输出&a…

视频监控相关笔记

一、QT 之 QTreeWidget 树形控件 Qt编程指南&#xff0c;Qt新手教程&#xff0c;Qt Programming Guide 一个树形结构的节点中的图表文本 、附带数据的添加&#xff1a; QTreeWidgetItem* TourTreeWnd::InsertNode(NetNodeInfo node, QTreeWidgetItem* parent_item) { // …

回文子串通用做法

647. 回文子串 先引出力扣链接 给定一个字符串&#xff0c;你的任务是计算这个字符串中有多少个回文子串。 具有不同开始位置或结束位置的子串&#xff0c;即使是由相同的字符组成&#xff0c;也会被视作不同的子串。示例 1&#xff1a; 输入&#xff1a;"abc" 输出…

for循环的应用

正三角 for (int i 0; i < 8; i) { for (int j 0; j < 15; j) { int kong 8 - i - 1; int star 2 * i 1; if (j < kong) { Console.Write(" "); } else if (j < kong star)…

【LLM学习之路】9月23日24日 第十、十一天 Attention代码解读

【LLM学习之路】9月23日24日 第十、十一天 Attention代码解读 Transformer模型大致分为三类 纯 Encoder 模型&#xff08;例如 BERT&#xff09;&#xff0c;又称自编码 (auto-encoding) Transformer 模型&#xff1b;纯 Decoder 模型&#xff08;例如 GPT&#xff09;&#…

多颜色绘制语义分割/变化检测结果图

在论文绘图时&#xff0c;传统的二元语义分割结果图颜色单一&#xff08;下图左&#xff09;&#xff0c;所以论文中常根据混淆矩阵类别使用多颜色进行绘制&#xff08;下图右&#xff09;&#xff0c;可以看到&#xff0c;结果的可视化效果更好。 以下是绘制代码&#xff1a; …

同等学力申硕英语网课如何选择

很多考生想知道同等学力申硕英语网课如何选择&#xff0c;小编告诉大家&#xff0c;首先明确自己的学习目标和需求是为了提高口语、阅读、写作还是听力能力? 只有明确了自己的学习目标和需求&#xff0c;才能更好地选择适合自己的课程和平台。 二、选择知名品牌和口碑良好的平…

UE5地图白屏/过曝/非常亮の解决方法

今天遇到一个问题 , 新建项目 , 打开虚幻第三人称地图的默认关卡 , 发现白屏 , 啥也看不见 猜测可能是虚幻编辑器的bug , 造成白屏的原因应该是场景过曝了 记录一下解决方案 第一种解决方法 找到场景中的 后期处理体积 (PostProcessVolume) 直接删掉 或者找到 细节面板中 -…

衍射的角谱理论

一、单色平面波与本征函数 不考虑夫琅禾费近似, 则相干光场在给定二平面间的传播过程就是通过一个二维线性空不变系统。 上式函数是这个系统的本征函数,表示振幅为1的平面波在xy平面上的复振幅分布,空间频率分量 = cos / , = cos / 与平面波的传播方向相联系, 空间…

java和mysql命名规则不一样,每次在mybatis中起别名太麻烦?来看看如何设置自动自动映射!

简介&#xff1a; 在 Java 开发中&#xff0c;当使用 MyBatis 框架连接 Java 代码与 MySQL 数据库时&#xff0c;常常会遇到 Java 和 MySQL 命名规则不一致的问题&#xff0c;这使得每次在 MyBatis 中为查询结果起别名变得繁琐。本教程将深入探讨如何设置自动映射&#xff0c;以…

java节假日工具类,判断一个日期是否是法定节假日

java节假日工具类&#xff0c;判断一个日期是否是法定节假日 1.HolidayUtil工具类2.工具类生成的日期json文件3.结果展示 无需链接数据库&#xff0c;无需手写节假日集合列表 1.HolidayUtil工具类 import com.alibaba.fastjson.JSONObject; import com.fasterxml.jackson.data…

DataGemma:谷歌大模型

诸神缄默不语-个人CSDN博文目录 DataGemma是谷歌出的大模型&#xff0c;是gemma 2的升级版&#xff0c;主要亮点是基于检索解决幻觉问题。 在huggingface和kaggle上均可下载模型权重。 检索数据源是Google’s Data Commons知识图谱。 官方博客&#xff1a;https://blog.googl…