AI 3D建模工具: Tripo 3D | Meshy AI

一句话结论:GLB 就是一个 ZIP 式思路的"单文件 3D"——JSON 描述 + 二进制数据 + 贴图,全在一个盒子里。所以它天然不会出现"打开是灰模、贴图丢了",那类问题属于 .gltf(外部引用)。反过来说,你打不开 GLB,通常只有两个原因:后缀被改过,或者版本/扩展不支持。


一、先给结论:三种打开方式

场景 用什么 说明
网页/手机上快速看 浏览器在线查看器 拖进去即可,贴图跟着文件走
验收资产(尺寸、朝向、面数) 带"验证报告"的查看器 GLB 是给运行时用的,先验证再看
编辑 Blender(自带 glTF 2.0 导入) 导入后是普通网格,能改材质

二、GLB 的结构:12 字节头 + 若干分块

对 Khronos 官方示例 BoxTextured.glb 做二进制解剖:

项 实测值
魔数 glTF(4 字节)
版本 2
声明总长度 5,956 字节,与实际大小一致 ✅
分块 1 JSON,1,336 字节(材质、节点、贴图描述)
分块 2 BIN\0,4,592 字节(顶点、索引、以及贴图字节)
算术校验 12 + (8 + 1336) + (8 + 4592) = 5956 ✅
贴图 image/png,bufferView 引用 → 内嵌在 BIN 里
几何 12 个三角面 / 24 个顶点(带索引复用)
包围盒 1 × 1 × 1 米(glTF 规范单位就是米)

注意那个 24 顶点:同样 12 个三角面,STL 要存 36 个顶点,GLB 只存 24 个(8 个角 × 3 个法线方向)。索引复用是 GLB 更小的第一个原因,贴图编码是第二个。

三种"同一个模型"的体积对照

形式 字节 说明
外部三件套:.gltf + .bin + .png 3,695 + 840 + 3,750 = 8,285 搬家必须整目录搬
自包含 .gltf(base64 内嵌) 8,462 单文件,但 base64 让体积涨到 GLB 的 1.42 倍
.glb 5,956 二进制分块,没有 base64 膨胀

结论很直接:要单文件,就用 GLB;要人能读、要 diff、要手改,才用 .gltf。


三、打不开的两类原因(其余都很罕见)

① 后缀被改过:xxx.glb 其实是 .gltf,或反过来。实测:把 BoxTextured.glb 改名成 .gltf,再按 JSON 解析 → UnicodeDecodeError。因为文件开头是 glTF 二进制头(67 6C 54 46),不是 {。

一行判定:

head = open(path,'rb').read(4)
is_glb  = head == b'glTF'
is_gltf = head.lstrip().startswith(b'{')

② 版本或扩展不支持。GLB 头部第 2 个 4 字节是版本号,只见过 2(glTF 1.0 的 GLB 极少)。真正会卡住你的是 extensionsRequired 里的扩展:Draco 压缩(KHR_draco_mesh_compression)、meshopt、Basis 纹理(KHR_texture_basisu)。老的/精简的查看器遇到"必需扩展"会直接拒绝加载,而不是显示灰模。

判定:把 GLB 的 JSON 分块读出来看 extensionsRequired(有内容就必须用支持它的加载器)。

顺带说一个反常识的点:GLB 里也能放外部文件。规范允许 image.uri 指向外部贴图,只是导出器默认内嵌。所以"GLB 一定不会丢贴图"这句话要加个"通常"。


四、在线打开的实际流程(BimAnt)

  1. 打开 GLB 在线查看,拖入 .glb;
  2. 看朝向:glTF 规范是 Y 轴向上、右手系、单位米。如果模型躺着,是导出器没按规范写,不是查看器的问题;
  3. 看尺寸:显示 0.01 米的汽车模型,就是导出时按 cm 建模却没转换;
  4. 看贴图:正常应该直接带纹理。灰模说明该文件确实是"无材质 GLB"(text-to-3D 常见)。

需要更细的结构检查(缺资源、非法索引、扩展声明)可以用 glTF Viewer 2.0 的验证报告。


五、GLB 和相邻格式怎么选

你的场景 选它 理由
网页/小程序展示 GLB 单文件、贴图内嵌、生态最全(three.js / model-viewer / Babylon 都原生支持)
需要人读、进 Git diff .gltf + 外部文件 JSON 可读,方便 code review 与脚本批处理
要动画 GLB(带 skin/animation) glTF 2.0 支持骨骼与动画,FBX 更适合进 DCC 编辑
3D 打印 STL / 3MF 打印链路不认 glTF(切片器不支持)

体积太大时,先做几何优化再考虑压缩:见 3D 模型在线轻量化。


常见问题

Q:GLB 和 glTF 是两种格式吗?一种格式、两种封装。.gltf 是 JSON + 外部资源,.glb 是二进制单文件。内容模型完全一致。

Q:为什么 text-to-3D 工具都导出 GLB?因为要"一个文件丢进网页就能显示"。STL 不能带材质,OBJ 要一堆配套文件,FBX 浏览器里基本没法直接读。

Q:GLB 能转回 STL 吗?能,但会丢掉 UV、材质和动画——STL 只有三角面。做 3D 打印时这是正常取舍。

Q:打开 GLB 提示"不支持的扩展"怎么办?先看扩展名:Draco 需要用支持 Draco 的加载器(本站在线查看器按可用扩展处理),或者用 Blender 重新导出为不压缩的 GLB。

Q:GLB 里能塞几个模型?一个文件可以有多 mesh / 多 node / 多个场景。常见是"一个场景多个零件",不是"一个文件一个模型"。


样本与复现:Khronos glTF-Sample-Assets/Models/BoxTextured(glTF 与 GLB 两种封装);分块解析用 Python 3.10 + struct + json;体积对照由 base64 内嵌脚本生成。数字均为 2026-10-25 实测。

相关阅读:glTF / GLB 尺寸朝向校验与体积优化 | 3D 模型在线轻量化 | 3D 模型在线查看工具 | 3D 格式与在线查看完全指南

本文由 BimAnt 整理,含本地实测数据,转载请注明出处。最后更新:2026-10-25

查看专题全部文章 →

按格式打开:GLB 在线查看 | glTF 文件怎么打开 | OBJ 文件在线预览(浏览器直接打开,不上传服务器)