obj 文件基本结构及读取 - 计算机图形学
读取 Obj 格式的模型文件(Dx10) - [Tutorial]
引言:
最近开始用 DirectX 10 了,感觉和 Dx9 还是有一些变化的。虽然还不能完全理解这些变化所带来的优势,但是基本还是适应了。
唯一觉得不适应的就是在 Dx10 的接口里面,D3DX 库里面已经没有对于.x 模型文件的直接支持了。就是说不能通过 D3DX 来读取.x 模
型文件了,Dx10 提供了一种新的模型格式 sdkmesh。但是为了读取这种模型,或者自己写解析器,可能会很复杂,或者用 DXUT 的接
口,但是如果仅仅为了读取模型文件就用了这个庞大的接口多少显得有些累赘。所以我自己也弄了一个读取 Obj 格式的模型文件的 Demo,
对于想读取自己自定义格式的模型文件的朋友,可以看看。希望能有一点帮助。
正文:
Obj 是一种应用广泛的模型格式。在很多三维建模软件里面,都可以找到 Obj 格式的导出插件。本文简单解析了 Obj 的最基本的格式,
可以读取由三角形组成的模型。
为了简单起见,这里分析的 Obj 是 ASCII 码格式的,这样用户可以用 wordpad 查看 obj 文件里面的内容,配合程序的调试,可以更好的
理解文件解析的过程。其实这个模型格式可以很简单的描述一个 Mesh。下面我们简单看看一些关键字:
# 这个就相当于 C++代码里面的//,如果一行开始时#,那么就可以理解为这一行完全是注释,解析的时候可以无视
g 这个应该是 geometry 的缩写,代表一个网格,后面的是网格的名字。
v v 是 Vertex 的缩写,很简单,代表一个顶点的局部坐标系中的坐标,可以有三个到四个分量。我之分析了三个分量,因为对于正常的
三角形的网格来说,第四个分量是 1,可以作为默认情况忽略。如果不是 1,那可能这个顶点是自由曲面的参数顶点,这个我们这里就不
分析了,因为大部分的程序都是用三角形的。
vn 这个是 Vertex Normal,就是代表法线,这些向量都是单位的,我们可以默认为生成这个 obj 文件的软件帮我们做了单位化。
vt 这个是 Vertex Texture Coordinate,就是纹理坐标了,一般是两个,当然也可能是一个或者三个,这里我之分析两个的情况。
mtllib <matFileName> 这个代表后面的名字是一个材质描述文件的名字,可以根据后面的名字去找相应的文件然后解析材质。
usemtl <matName> 这里是说应用名字为 matName 的材质,后面所有描述的面都是用这个材质,直到下一个 usemtl。