什么是 .gltf 和 .glb 文件?两者的区别,以及如何在 Mac 上打开它们
glTF 是 Khronos Group 推出的开放格式,用于网页、游戏和 AR 中的 3D 模型,包含材质、纹理、对象层级、相机和动画。.gltf 文件是指向其他文件的 JSON;.glb 则是把同样的数据打包成一个二进制文件。自 2022 年起,glTF 成为 ISO/IEC 12113 标准,在 macOS 27 上连预览都能打开它。
概览
- 扩展名
- .gltf, .glb
- 类型
- 3D 场景
- 创建者
- Khronos Group
- 始于
- 2015
- 标准
- ISO/IEC 12113:2022
- macOS 自身(不装应用)
- 部分支持——见下文
信息核对于 2026年11月4日
两种包装,相同的数据
.gltf 文件是 JSON 格式的可读文本。它描述场景和几何(二进制数据,即“buffer”),并从单独的文件中获取纹理——或者把纹理作为一长串 base64 字符串放在 JSON 里。下面是从 Onshape 导出的一个文件中选取的几个部分:
{
"asset": {
"generator": "ONSHAPE BY PTC INC, 1.217",
"version": "2.0"
},
"extensionsUsed": [
"PTC_onshape_metadata"
],
"buffers": [
{
"byteLength": 1044168,
"uri": "data:application/octet-stream;base64,oWaSPRhJBT6qFIE6bDaSPTJ…"
}
]
}这里整整一兆字节的几何以文本形式放在 JSON 中,所以文件有 2.65 MB。
.glb 把同样的内容装进一个二进制包。它以一个 12 字节的文件头开头:字母 glTF、版本号 2 和文件总长度。接着是 JSON,然后是二进制数据。一个从 Onshape 导出的齿轮的前 28 个字节:
00000000: 676c 5446 0200 0000 1c65 0b00 5064 0200 glTF.....e..Pd..
00000010: 4a53 4f4e 7b22 6163 6365 7373 JSON{"access长度 1c65 0b00 是 746,780 字节——正好等于文件的大小。
为什么 .gltf 打开后没有纹理
当 .gltf 指向附带文件(包含几何的 .bin、包含纹理的图片)时,这些文件必须跟它一起传。只发送 .gltf,对方看到的就是没有纹理的模型,或者什么都看不到。Apple 的预览指南也对此提出了警告。请发送整个文件夹——或者更好的办法是发送 GLB,所有东西都在一个文件里。
glTF 包含什么
- 网格,由三角形组成。没有精确的 CAD 曲面或公差——那是 STEP 的领域。
- PBR 材质(metallic-roughness,金属度-粗糙度),带 PNG 和 JPEG 纹理,以及顶点颜色。
- 对象层级,带名称,一个文件中可以有多个对象和场景。
- 相机和动画,包括骨骼和变形目标(morph target)。
- 元数据:哪个程序生成了文件、版权。
在核心之上还有各种扩展:Draco 和 meshopt 几何压缩、KTX2 和 WebP 纹理、额外的材质属性。正是它们导致一个程序能打开某个文件,而另一个程序打不开。
扩展:为什么某些地方打不开 GLB
文件会列出它使用的扩展(extensionsUsed),以及缺了就无法读取的扩展(extensionsRequired)。上面那个 Onshape 齿轮使用了 Onshape 自己的 PTC_onshape_metadata,但只列为“使用”,所以不认识它的程序可以跳过它。
压缩则不同。用 Draco 或 meshopt 压缩的模型,或者带 KTX2 纹理的模型,通常会把这些扩展列在 extensionsRequired 中,不支持它们的程序就打不开。根据 Apple Developer Forums 上的帖子,Apple 的 Reality Converter 也是如此。如果一个 GLB 在别处能打开,在你这里却打不开,请在它的 JSON 中查找 extensionsRequired。
单位是米,不是毫米
glTF 规范规定所有距离都以米为单位,Y 轴朝上。同一个从 Onshape 导出的圆柱,在 STL 中写作 54 × 54 × 25,在 glTF 中写作 0.054 × 0.054 × 0.025。
这对打印来说是个陷阱。STL 没有单位,切片软件把它当作毫米读取,所以一个未经缩放就转换成 STL 的 glTF 会小一千倍。Preview3D 转换时不会改动数字:把 glTF 转成 STL 后,请在切片软件中把它放大到 100,000%,或者在来源程序中以毫米导出。
glTF 从何而来
glTF 诞生于 COLLADA 工作组。Khronos 于 2013 年 3 月宣布了它,1.0 版于 2015 年 10 月发布。2017 年 6 月发布的 glTF 2.0 用 PBR 材质取代了着色器,并把 GLB 纳入核心规范;1.0 的文件与它不兼容。2022 年 7 月,glTF 2.0 作为国际标准 ISO/IEC 12113 发布。Khronos 称它为“3D 界的 JPEG”。
如何在 Mac、iPad 和 iPhone 上打开 glTF 和 GLB
根据 Apple 的指南,在 macOS 27 上,预览可以打开 .gltf 和 .glb。不过它只能把编辑过的模型存储为 USD 或 USDZ。快速查看在不装其他应用的情况下能否显示它们,我还没有核实。在较旧的 macOS 版本上情况不一:有些人的预览能打开 GLB,另一些人的预览则从“打开方式”中消失了。
其他选择:
- Blender 能导入和导出 glTF,但它是一个完整的 3D 软件。
- 网页查看器,例如 Khronos glTF Sample Viewer 或 PlayCanvas 查看器,可以在浏览器中显示模型。
- Preview3D,我的应用,可以在窗口中和快速查看里打开 glTF 和 GLB,带颜色和材质,支持 Mac、iPad、iPhone 和 Apple Vision Pro。
Preview3D 也能读取从附带文件中获取几何和纹理的 .gltf,在快速查看中也一样。模型信息以文件本身的单位显示尺寸——对 glTF 来说是米——以及三角形数量,并提供网格检查。在 iPad 和 iPhone 上,它会在 AR 中以真实大小立起模型,因为 glTF 的单位由规范规定。

不上传,把 GLB 转换为 STL
在 Mac 上,Preview3D 通过 文件 → 导出模型为…(⌥⌘E)转换为 STL、OBJ 或 PLY,无需联网。搜索“glb to stl”,你得到的大多是在线转换器,它们会把你的文件上传到别人的服务器——对于客户的模型或 AI 生成的模型,这一点值得想一想。转换之后,请像上面说的那样注意单位是米。
常见问题
.gltf 和 .glb 有什么区别?
同样的数据,不同的包装。.gltf 是文本(JSON),常常把几何和纹理放在附带文件中。.glb 则把一切放在一个二进制文件里。
我应该发送哪一种?
GLB。它是一个文件,途中不会丢东西。
为什么我的 .gltf 打开后没有纹理?
它的附带文件(.bin 和图片)丢了。请发送整个文件夹,或者把模型另存为 GLB。
为什么我的模型转换成 STL 后变得很小?
glTF 以米为单位,而切片软件把 STL 当作毫米读取。请把模型放大到 100,000%。
Mac 不装其他应用能打开 GLB 吗?
在 macOS 27 上可以,用预览。在较旧的版本上情况不一。
为什么 GLB 在一个程序中能打开,在另一个程序中却打不开?
最常见的原因是扩展——通常是 Draco 或 meshopt 压缩,或者 KTX2 纹理。不支持它们的程序无法读取该文件。
相关页面
- .stl 文件——GLB 最常被转换成的打印格式
- .fbx 文件——Autodesk 用于整个场景的封闭格式
- .step 和 .stp 文件——来自 CAD 的精确几何
资料来源
- Khronos:glTF 2.0 规范——.gltf 和 .glb 的编码、单位、扩展
- Khronos:glTF 和 扩展列表
- Khronos:glTF 2.0 成为 ISO/IEC 国际标准
- Khronos:glTF 2.0 发布
- Library of Congress:glTF
- Apple:预览中的 3D 文件 和 导出 3D 文件
- Apple Developer Forums:Reality Converter 与 Draco 和 KTX 压缩
有没有哪个 GLB 在你的 Mac 上打不开,或者转换后尺寸不对?请写信到 apps@xfanta.com,告诉我它来自哪个程序。
在 Preview3D 中打开
在 Mac、iPad、iPhone 和 Vision Pro 上打开 STEP、3MF、STL、G-code、BGCODE 等格式。一次购买,无需账户,无需联网。
App Store 上的 Preview3D