Preview3D
获取

什么是 .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 4

v 行是一个顶点,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//1

1//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 是文本,如果默认应用被改过,它可能会在文本编辑中打开。这时请在访达中选择“显示简介 → 打开方式”,选中预览,然后点按“全部更改”。

其他选择:

  • Blender 和 MeshLab 都是免费的,能连同材质打开 OBJ。
  • Preview3D,我的应用,可以在 Mac、iPad、iPhone 和 Apple Vision Pro 上打开 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 查看器,然后点按“全部更改”。

相关页面

资料来源

你有没有一个 OBJ,到了你的 Mac 上却没有纹理,尽管 .mtl 就在它旁边?请写信到 apps@xfanta.com,告诉我它来自哪个程序。

在 Preview3D 中打开

在 Mac、iPad、iPhone 和 Vision Pro 上打开 STEP、3MF、STL、G-code、BGCODE 等格式。一次购买,无需账户,无需联网。

App Store 上的 Preview3D