参考:http://blog.csdn.net/hunter8777/article/details/6395858
OBJ文件是一种静态模型文件,即文件中不包含动画信息。该文件格式由Alias|Wavefront创建。OBJ如此被重视是因为它可以从Maya中导出,后者是支持3D模型创建、编辑等操作的工业标准级软件。几乎所有知名的3D软件都支持OBJ文件格式。
本文来详细理解下OBJ文件的结构。
参考内容《Focus On 3D Models》Chapter 4 Loading Obj Files
OBJ文件没有文件头,文件可以是ASCII,也可以是文本文件的形式进行保存,一般为文本文件。在文本文件中,可以使用#来添加注释,可读性行很高。
OBJ3.0格式支持多边形(Polygon),直线(Lines),表面(Surfaces),和自由形态曲线(Free-form Curves)。
直线和多角形通过它们的点来描述,曲线和表面则根据于它们的控制点和依附于曲线类型的额外信息来定义。这些信息支持规则和不规则的曲线,包括那些基于贝塞尔(Bezier)曲线,B样条(B-spline),基数(Cardinal/Catmull-Rom样条),和泰勒方程(Taylor equations)的曲线。
在OBJ文件中,每行由一个前缀字母作为关键字开头,用来标示该行是什么类型的模型数据,其中比较重要的类型如下:
v:几何体的顶点信息
vt:纹理贴图的坐标点
vn:几何体顶点法线
f:构成一个面的顶点索引
其他的还有:
g:分组名称
p:点
l:线
surf:曲面
curv:曲线
简单的示例如下:
v -0.13 0.27 0
v 1.73 2.64 0
v -1.05 1.73 0
f 1 2 3
该示例定义了3个顶点,顶点中包含了x、y、z信息。还有一个面的信息,该面由上述的3个顶点组成。
一种简单地表示f(面)的形式如下:
f 1 2 3
这行的意义为该面由v定义的索引为1、2、3的顶点所构成。但这样的表示方式是忽略顶点的纹理坐标和顶点法线信息的。
如果需要考虑加入纹理坐标,可以如下表示:
f 1/4 2/5 3/6
这行的意义为该面由v定义的索引为1、2、3的顶点所构成,并且它们相应的纹理坐标是vt中的4、5、6索引定义。
再加入顶点法线信息,可以如下表示:
f 1/4/7 2/5/8 3/6/9
在这里,对应的第三个值7、8、9就是在vn中定义索引。
如果只要顶点和法线信息,无须纹理坐标,可以表示如下:
f 1//4 2//5 3//6
OBJ文件简单易用,一般读取的过程就是检验开头关键词,然后将后面的数据添加入相应的数据管理中。读取的控制流程可以使用switch-case结构实现。
最后列出一份完整的OBJ关键字列表:
顶点数据(Vertex data):
v 几何体顶点(Geometric vertices)
vt 贴图坐标点(Texture vertices)
vn 顶点法线(Vertex normals)
vp 参数空格顶点 (Parameter space vertices)
自由形态曲线(Free-form curve)/表面属性(surface attributes):
deg 度(Degree)
bmat 基础矩阵(Basis matrix)
step 步尺寸(Step size)
cstype 曲线或表面类型 (Curve or surface type)
元素(Elements):
p 点(Point)
l 线(Line)
f 面(Face)
curv 曲线(Curve)
curv2 2D曲线(2D curve)
surf 表面(Surface)
自由形态曲线(Free-form curve)/表面主体陈述(surface body statements):
parm 参数值(Parameter values )
trim 外部修剪循环(Outer trimming loop)
hole 内部整修循环(Inner trimming loop)
scrv 特殊曲线(Special curve)
sp 特殊的点(Special point)
end 结束陈述(End statement)
自由形态表面之间的连接(Connectivity between free-form surfaces):
con 连接 (Connect)
成组(Grouping):
g 组名称(Group name)
s 光滑组(Smoothing group)
mg 合并组(Merging group)
o 对象名称(Object name)
显示(Display)/渲染属性(render attributes):
bevel 导角插值(Bevel interpolation)
c_interp 颜色插值(Color interpolation)
d_interp 溶解插值(Dissolve interpolation)
lod 细节层次(Level of detail)
usemtl 材质名称(Material name)
mtllib 材质库(Material library)
shadow_obj 投射阴影(Shadow casting)
trace_obj 光线跟踪(Ray tracing)
ctech 曲线近似技术(Curve approximation technique)
stech 表面近似技术 (Surface approximation technique)
分享到:
相关推荐
OBJ文件格式详解[参照].pdf
obj文件格式 mtl文件格式 opengl threjsss,介绍得很清楚了。
Obj文件格式,箱编程读取其它造型工具绘制的3d内容,就通过OBJ格式转过来吧。
在vtk中将三维模型的文件格式保存为obj文件格式
Obj文件格式实验(ObjParser)
OBJ文件定义了对象的几何特性和其他一些特征,由于文件结构非常简单,因此适合在应用程序中读取或进行3D文件格式转换。
详细解答了obj文件,让人一目了然!比如,v,vn,g,f的意思。为obj文件的读入,解析,渲染提供了良好的基础,。当然还是不懂亦可以问在下滴!
讲述的是Borland公司开发的一般编译器中生成的中间文件.obj的格式。
可以读取obj格式的文件到matlab空间中,obj格式的文件中,只能包含点和面的信息
本程序可以将.vtk文件格式转化为.obj文件格式。
- 读取 OBJ 文件格式- 写入 OBJ 文件格式- 减少多边形# 此代码支持仅由 Faces、Vertex 而非 Vt、Vn 组成的 OBJ 文件格式
摘要:VB源码,文件操作,文件格式分析 VB写的Obj文件格式分析工具,压缩包内付 COFF文件格式文档,捣鼓了几个晚上 基本上捣鼓完了。。。 部分源代码说明: ‘cName用来保存段名,常用的段名有.text,.data,....
汽车图像
源代码实现了多模型的读取和纹理贴图!适合小白
一个小程序,结合了OpenGL和读取三维模型文件。先使用SolidWorks建立一个法兰的模型,保存为obj文件格式,再在C++控制台程序中读取其数据,利用OpenGL显示出来。
如何把点云txt文件转化为unity3D能够打开的obj文件的详细流程(操作文档,无代码)
OpenGL OBJ 模型查看器此应用程序允许您以 .obj 文件格式加载和渲染模型。 它是使用构建的,以展示使用该库创建强大的应用程序是多么容易。 对 MTL 和 OBJ 的支持是通过库实现的。 有关更多信息,请访问的页面。
Octave / Matlab函数可生成各种形状的3D模型并将网格保存为Wavefront .obj文件格式。 这是一个正在进行的工作。 事情可能会Swift改变,使旧的事情不起作用。 不过,更经常的是,事情在很长一段时间内都不会改变。 ...
解码3D模型从OBJ文件格式-源码
程序基于VC6.0利用MFC和OpenGL库实现了3d模型中标准格式OBJ文件的读取,是一个很好的二次开发源代码