网站建设和管理是教什么科目,杭州服装设计公司,联盟营销是一种 的网络营销方式,建网站的公司时glb数据格式
glb 文件格式只包含一个glb 文件#xff0c;文件按照二进制存储#xff0c;占空间小
浏览
浏览glb工具的很多#xff0c;ccs#xff0c;3D查看器等都可以#xff0c;不安装软件的话用下面网页加载就可以#xff0c;免费 glTF Viewer (donmccurdy.com) glb…glb数据格式
glb 文件格式只包含一个glb 文件文件按照二进制存储占空间小
浏览
浏览glb工具的很多ccs3D查看器等都可以不安装软件的话用下面网页加载就可以免费 glTF Viewer (donmccurdy.com) glbxz.com 模型网 GLTF 编辑器 -NSDT 参考资料
完整的介绍文档可以参考以下几个
GLB文件 (sarkuya.com)
glTF 2.0 - Blender 4.2 手册
GLB (fileformat.com)
glTF Tutorial | glTF-Tutorials (khronos.org)
文件格式
开始正文介绍二进制的glb文件打开后结构如下 整体结构的包含一个文件头一个Json的chunk一个bin的chunk存储图像动画纹理等
header
头部数据长度12个字节
#读取12个字节按照小端转换为无符号整数
header f.read(12)
magic, version, length struct.unpack(III, header)名称说明数值解释magic魔术字0x46546C67对应ascII码glTFversion版本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是JSONchunkData数据JSON数据
#使用该指令可以将无符号整数转ascII对应值是JSON
chunk_type.to_bytes(4, byteorderlittle).decode(ascii)chunkData 已知数据格式为JSON所以将数据按照utf-8编码转换为对应的数据JSON数据并打印出来
gltf_data json.loads(json_chunk.decode(utf-8))
print(json.dumps(gltf_data, indent4))对应打印值对应如下 接下来对JSON结构进行解释其加载顺序对应是scenes、nodes、meshes、accessors、bufferViews、buffers、materials、textures、images。其中每个mesh包括一个bufferViews和一个materials。每一层的递进都有数组下标来确定结构存储在buffer中纹理存储在image中
名称说明包含声明scenes场景nodesnodes节点mesh、translation、chidrencamera、skinmeshes网格attributes、indices、material网格所需数据accessors访问器bufferView、componentType、count、type缓冲器索引数据类型大小bufferViews缓冲器buffer、byteOffset、byteLength、targetbuffer对应得位置buffers缓冲数据byteLengthuri、namebuffer的字节长度materials材质baseColorTexture、metallicFactor、roughnessFactor、extensions材质参数以及纹理索引textures纹理sourcesampler照片索引和采样器索引images照片name、uri、bufferView、mimeType纹理文件索引文件格式samplers采样器magFilter、minFilter放大缩小时滤波器
scenes
对应模型得场景一般模型一个场景即默认场景
每个场景包含一个node字段指定了sence的根节点 下图包含一个scene对象该对应指定了一个索引为2的node节点 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继承了器各个属性 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 accessors
accessors访问器是访问buffer的中间件是bufferView和mesh之间的桥梁表明bufferView的索引
名称说明bufferView在bufferViews中的索引componentType数据类型5120byte 5121ubyte5122short5123ushort5124int 5125uint5126float 5130doublecount数据个数type数据类型‘SCALAR’: 1,标量‘VEC2’: 2,‘VEC3’: 3,‘VEC4’: 4, 对应n维向量‘MAT2’: 4,‘MAT3’: 9‘MAT4’: 16, //n2维矩阵max所有的数据中最大值min所有的数据中最小值
该accessors 访问器包含多个中间件其中 第一个中间件对应bufferviews索引1float类型共9185个三维向量数据最大最小值对应如下
第二个中间件对应bufferviews索引2float类型共9185个二维向量数据最大最小值对应如下
第三个中间件对应bufferviews索引3ushort类型共18297个标量数据最大最小值对应如下 bufferViews
bufferViews表明数据在buffer中的具体位置
名称说明bufferbuffer数据的索引byteOffsetbuffer的字节偏移量byteLengthbuffer的字节长度target缓冲类型顶点属性 vertex attributes34962代表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缓冲类型属性 buffers
buffers是buffer数组每一个buffer存放真是数据通常包含bytelength、uri、name字段后两个不是必须的将各属性打包成字节通过偏移地址标记
名称说明byteLengthbuffer字节长度uribuffer的二进制文件地址非必须name名称非必须 该buffers包含一个buffer 该buffer的字节长度为739328 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扩展属性是无光照着色模型 textures
textures对应纹理信息用于渲染对象的纹理由材料引用以定义基本物体的颜色以及物理特性
包含两个参数source 对应纹理照片sampler采样器
名称说明source照片纹理sampler采样器 textures包含多个纹理 第一个纹理照片索引0采样器索引0 第二个纹理照片索引1采样器索引1 第三个纹理照片索引2采样器索引2 images
图片资源
名称说明name名称uri指向纹理文件对glb文件为空通过给出的bufferView的索引bufferView纹理对应的索引mimeType图片格式 该images图片资源包括7个 图片1图片索引0图片格式jpeg 图片2图片索引4图片格式jpeg 图片3图片索引8图片格式jpeg 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处纹理使用1GL_MIRRORED_REPEAT33648重复纹理不过重复的图片是镜像方式的GL_REPEAT10497重复纹理即1.1处纹理和0.1处纹理一致 该处的采样器集合samplers包含多个采样器其采样器对应值一致 模型放大时滤波器使用线性插值模型缩小时滤波器使用线性插值。