什么是 .obj 文件?为什么它到手时没有纹理,以及如何在 Mac 上打开它
OBJ 是 Wavefront 在 1990 年前后创建的一种 3D 网格文本格式,几乎所有 3D 程序和 3D 扫描应用至今仍能读写它。不过它本身并不携带颜色和纹理:它们存放在单独的 .mtl 文件和图片中,一旦在传递途中被分开,模型到手时就是白色或灰色的。
概览
- 扩展名
- .obj, .mtl
- 类型
- 三角网格
- 创建者
- Wavefront Technologies
- 始于
- 约 1990 年
- 标准
- 不是正式标准
- macOS 自身(不装应用)
- 能打开,也能显示预览
信息核对于 2026年11月4日
可读的文本,逐行书写
一个完整的八面体用 OBJ 表示是这样的:
o octahedron
v 10 0 0
v -10 0 0
v 0 10 0
v 0 -10 0
v 0 0 10
v 0 0 -10
f 5 1 3
f 5 3 2
f 5 2 4
f 5 4 1
f 6 3 1
f 6 2 3
f 6 4 2
f 6 1 4v 行是一个顶点,f 行是一个由顶点编号组成的面。编号从 1 开始,负数则从当前行往回数。与 STL 不同,这里的面共用顶点,所以文件不会重复同一个点。面也不一定是三角形:四边形和一般多边形都可以。
Blender 导出的文件会添加法线(vn)、纹理坐标(vt)、平滑组(s),最重要的是,还有对材质文件的引用:
# Blender 5.1.0
mtllib cylinder.mtl
o cylinder
v 17.677670 0.000000 17.677670
vn -0.0000 -1.0000 -0.0000
s 0
f 1//1 2//1 3//11//1 表示顶点 1 搭配法线 1,没有纹理坐标。
.mtl 文件和纹理:哪些东西必须跟 OBJ 一起传
颜色和材质不在 OBJ 里,而在 OBJ 的 mtllib 行所指名的文件中。在 .mtl 中,每种材质位于 newmtl 之下,它的颜色在 Kd 下,纹理则在 map_Kd 下,写作一个图片路径。所以一个模型常常同时由三类文件组成:
- 包含几何的 .obj;
- .mtl,文件名必须与
mtllib行上的完全一致; - 纹理图片,位于 .mtl 给出的路径上,常常在一个子文件夹里。
我用 Apple 的 Model I/O 框架试过。一个 .mtl 中写着 Kd 1 0 0 的三角形载入后是红色的,子文件夹中的纹理也能载入。当 .mtl 不在 .obj 旁边时,框架会报告“Unable to find mtl file”,模型则是白色的。
这个链接有多容易断,从 Preview3D 自己的测试集中就能看出来。文件 07-mesh.obj 被改过名,它的 .mtl 叫 07-mesh.mtl,但 OBJ 里仍然写着 mtllib cylinder.mtl。只改了一个文件名就足以出问题。.mtl 中的绝对纹理路径,例如 C:\Users\…,在另一台电脑上也会造成同样的结果。
所以请把 OBJ 作为整个文件夹或一个 ZIP 发送。如果你需要把模型连同纹理放在一个文件里,请把它另存为 GLB。
没有单位,没有层级
OBJ 没有单位。Blender 把一个直径 54 mm 的圆柱导出为 54 × 25 × 54(Y 轴朝上);在 glTF 中,同一个圆柱会是 0.054。这些数字是什么意思,程序在导入时只能去猜。
OBJ 也没有对象层级、动画、相机或灯光。逐顶点颜色(v x y z r g b)不属于规范。扫描仪最常使用它们,而且只有部分程序会读取——根据 Library of Congress 的说法,例如 MeshLab、three.js 和 Mac 上的预览。
OBJ 从何而来
OBJ 是为 Wavefront Technologies 的 Advanced Visualizer 制定的。没人知道确切的年份;Library of Congress 的说法是“1990 年前后”。格式说明作为一份约 1992 年手册的附录保存了下来,.mtl 的说明则来自 1995 年。Wavefront 于 1995 年与 Alias 合并,Autodesk 于 2006 年收购了 Alias。这种格式的说明是公开的,但没有人维护它。
规范还描述了几乎没有程序会读取的 NURBS 和贝塞尔曲线及曲面,并提到了一种从未有过文档的二进制 .mod 变体。
如何在 Mac、iPad 和 iPhone 上打开 OBJ
macOS 自己就认识 OBJ。根据 Library of Congress 的说法,预览从 OS X 10.11 起就能打开它,在 macOS 27 上(在 27.0.1 上核实过),快速查看和访达缩略图也都能显示它。由于 OBJ 是文本,如果默认应用被改过,它可能会在文本编辑中打开。这时请在访达中选择“显示简介 → 打开方式”,选中预览,然后点按“全部更改”。
其他选择:
Preview3D 通过 Model I/O 读取 OBJ。当文件没有法线时,它会自己计算,这样模型就不会显得扁平或发黑。模型信息以文件本身的单位显示尺寸和三角形数量,并提供网格检查。有三种带折边线的视图。在 iPad 和 iPhone 上,它会在 AR 中把模型立在你的桌上,并按桌面大小显示,因为 OBJ 没有单位。
把 OBJ 转换为 STL
在 Mac 上,Preview3D 通过 文件 → 导出模型为…(⌥⌘E)转换为 STL 或 PLY,不上传任何东西。STL 只认识三角形,所以四边形和多边形会在转换中被拆分。数字保持不变,所以转换后请在切片软件中检查尺寸。另外,STL 不携带材质或纹理。
常见问题
为什么我的 OBJ 打开后没有纹理?
它的 .mtl 或图片丢了,或者它们的名称和路径对不上。请把 .obj、.mtl 和纹理放在同一个文件夹中,并检查 OBJ 中的 mtllib 指向的是正确的 .mtl。
什么是 .mtl 文件?
一个供 OBJ 使用的材质文本文件:颜色、光泽度和纹理路径。OBJ 通过文件名引用它。
OBJ 有单位吗?
没有。坐标只是数字,程序在导入时去猜它们是毫米还是米。
3D 打印用 STL 还是 OBJ 更好?
对于单色零件,STL 就够了。当你需要材质和纹理时,OBJ 才有用。对于彩色打印,3MF 是专为此设计的格式。
Mac 不装其他应用能打开 OBJ 吗?
能,预览和快速查看都能处理它。
为什么我的 OBJ 会在文本编辑中打开?
OBJ 是文本,它的默认应用可能被改过了。在访达中选择“显示简介 → 打开方式”,选中预览或其他 3D 查看器,然后点按“全部更改”。
相关页面
- .stl 文件——OBJ 最常被转换成的打印格式
- .gltf 和 .glb 文件——模型连同纹理放在一个文件里
- .fbx 文件——整个场景,包括动画
资料来源
- Library of Congress:OBJ——历史、顶点颜色、预览支持
- Paul Bourke:OBJ 格式 和 MTL
- IANA:model/obj
- Apple:Model I/O
- Blender Artists:.mtl 文件无法载入
- three.js:用 OBJLoader 和 MTLLoader 时纹理无法载入
你有没有一个 OBJ,到了你的 Mac 上却没有纹理,尽管 .mtl 就在它旁边?请写信到 apps@xfanta.com,告诉我它来自哪个程序。
在 Preview3D 中打开
在 Mac、iPad、iPhone 和 Vision Pro 上打开 STEP、3MF、STL、G-code、BGCODE 等格式。一次购买,无需账户,无需联网。
App Store 上的 Preview3D