obj文件格式与mtl文件格式.docx
- 文档编号:4388050
- 上传时间:2022-12-01
- 格式:DOCX
- 页数:13
- 大小:24.28KB
obj文件格式与mtl文件格式.docx
《obj文件格式与mtl文件格式.docx》由会员分享,可在线阅读,更多相关《obj文件格式与mtl文件格式.docx(13页珍藏版)》请在冰豆网上搜索。
obj文件格式与mtl文件格式
obj文件格式与.mtl文件格式
最近在学习obj文件格式,上网查了些资料,很难找到比较全面的文章,尤其是对.mtl文件的说明甚少。
今天把最近搜索的资料整合了一下。
这里的obj文件格式指的是Wavefront公司为它的一套基于工作站的3D建模和动画软件"AdvancedVisualizer"开发的一种文件格式。
OBJ文件是一种标准的3D模型文件格式,很适合用于3D软件模型之间的互导。
OBJ文件是一种文本文件格式,这就意味着你可以直接用写字板打开进行查看修改。
目前几乎所有知名的3D软件都支持OBJ文件的读写,不过很多软件需要通过插件才能做到这一点。
另外,作为一种优秀的文件格式,很多游戏引擎也都支持OBJ文件。
OBJ3.0格式支持多边形(
最近在学习obj文件格式,上网查了些资料,很难找到比较全面的文章,尤其是对.mtl文件的说明甚少。
今天把最近搜索的资料整合了一下。
这里的obj文件格式指的是Wavefront公司为它的一套基于工作站的3D建模和动画软件"AdvancedVisualizer"开发的一种文件格式。
OBJ文件是一种标准的3D模型文件格式,很适合用于3D软件模型之间的互导。
OBJ文件是一种文本文件格式,这就意味着你可以直接用写字板打开进行查看修改。
目前几乎所有知名的3D软件都支持OBJ文件的读写,不过很多软件需要通过插件才能做到这一点。
另外,作为一种优秀的文件格式,很多游戏引擎也都支持OBJ文件。
OBJ3.0格式支持多边形(Polygon),直线(Lines),表面(Surfaces),和自由形态曲线(Free-formCurves)。
直线和多角形通过它们的点来描述,曲线和表面则根据于它们的控制点和依附于曲线类型的额外信息来定义。
这些信息支持规则和不规则的曲线,包括那些基于贝塞尔(Bezier)曲线,B样条(B-spline),基数(Cardinal/Catmull-Rom样条),和泰勒方程(Taylorequations)的曲线。
OBJ文件特点
-1-OBJ是一种3D模型文件,因此不包含动画、材质特性、贴图路径、动力学、粒子等信息。
-2-OBJ文件主要支持多边形(Polygons)模型。
虽然OBJ文件也支持曲线(Curves)、表面(Surfaces)、点组材质(PointGroupMaterials),但Maya导出的OBJ文件并不包括这些信息。
-3-OBJ文件支持三个点以上的面,这一点很有用。
很多其它的模型文件格式只支持三个点的面,所以我们导入Maya的模型经常被三角化了,这对于我们对模型的再加工甚为不利。
-4-OBJ文件支持法线和贴图坐标。
OBJ文件基本结构
OBJ文件不需要任何种文件头(FileHeader),尽管经常使用几行文件信息的注释作为文件的开头。
OBJ文件由一行行文本组成,注释行以一个“井”号(#)为开头,空格和空行可以随意加到文件中以增加文件的可读性。
有字的行都由一两个标记字母也就是关键字(Keyword)开头,关键字可以说明这一行是什么样的数据。
多行可以逻辑地连接在一起表示一行,方法是在每一行最后添加一个连接符(\)。
注意连接符(\)后面不能出现空格或tab格,否则将导致文件出错。
下列关键字可以在OBJ文件使用【关键字根据数据类型排列,每个关键字有一段简短描述】
顶点数据(Vertexdata):
v 几何体顶点(Geometricvertices)
vt贴图坐标点(Texturevertices)
vn顶点法线(Vertexnormals)
vp参数空格顶点(Parameterspacevertices)
自由形态曲线(Free-formcurve)/表面属性(surfaceattributes):
deg度(Degree)
bmat基础矩阵(Basismatrix)
step步尺寸(Stepsize)
cstype曲线或表面类型(Curveorsurfacetype)
元素(Elements):
p点(Point)
l线(Line)
f面(Face)
curv曲线(Curve)
curv22D曲线(2Dcurve)
surf表面(Surface)
自由形态曲线(Free-formcurve)/表面主体陈述(surfacebodystatements):
parm参数值(Parametervalues)
trim外部修剪循环(Outertrimmingloop)
hole内部整修循环(Innertrimmingloop)
scrv特殊曲线(Specialcurve)
sp特殊的点(Specialpoint)
end结束陈述(Endstatement)
自由形态表面之间的连接(Connectivitybetweenfree-formsurfaces):
con连接(Connect)
成组(Grouping):
g组名称(Groupname)
s光滑组(Smoothinggroup)
mg合并组(Merginggroup)
o对象名称(Objectname)
显示(Display)/渲染属性(renderattributes):
bevel导角插值(Bevelinterpolation)
c_interp颜色插值(Colorinterpolation)
d_interp溶解插值(Dissolveinterpolation)
lod细节层次(Levelofdetail)
usemtl材质名称(Materialname)
mtllib材质库(Materiallibrary)
shadow_obj投射阴影(Shadowcasting)
trace_obj光线跟踪(Raytracing)
ctech曲线近似技术(Curveapproximationtechnique)
stech表面近似技术(Surfaceapproximationtechnique)
***************************************************************************************************************
Maya导出的OBJ文件:
在Maya中创建一个多边形立方体,选中这个立方体,导出格式为OBJ,文件名为"cube.obj".(如果没有此格式,请在Plug-inManager中载入"objExport.mll")用写字板打开"cube.obj"。
可以看到如下代码:
#Theunitsusedinthisfilearecentimeters.
gdefault
v-0.500000-0.5000000.500000
v0.500000-0.5000000.500000
v-0.5000000.5000000.500000
v0.5000000.5000000.500000
v-0.5000000.500000-0.500000
v0.5000000.500000-0.500000
v-0.500000-0.500000-0.500000
v0.500000-0.500000-0.500000
vt0.0000000.000000
vt1.0000000.000000
vt0.0000001.000000
vt1.0000001.000000
vt0.0000002.000000
vt1.0000002.000000
vt0.0000003.000000
vt1.0000003.000000
vt0.0000004.000000
vt1.0000004.000000
vt2.0000000.000000
vt2.0000001.000000
vt-1.0000000.000000
vt-1.0000001.000000
vn0.0000000.0000001.000000
vn0.0000000.0000001.000000
vn0.0000000.0000001.000000
vn0.0000000.0000001.000000
vn0.0000001.0000000.000000
vn0.0000001.0000000.000000
vn0.0000001.0000000.000000
vn0.0000001.0000000.000000
vn0.0000000.000000-1.000000
vn0.0000000.000000-1.000000
vn0.0000000.000000-1.000000
vn0.0000000.000000-1.000000
vn0.000000-1.0000000.000000
vn0.000000-1.0000000.000000
vn0.000000-1.0000000.000000
vn0.000000-1.0000000.000000
vn1.0000000.0000000.000000
vn1.0000000.0000000.000000
vn1.0000000.0000000.000000
vn1.0000000.0000000.000000
vn-1.0000000.0000000.000000
vn-1.0000000.0000000.000000
vn-1.0000000.0000000.000000
vn-1.0000000.0000000.000000
soff
gpCube1
usemtlinitialShadingGroup
f1/1/12/2/24/4/33/3/4
f3/3/54/4/66/6/75/5/8
f5/5/96/6/108/8/117/7/12
f7/7/138/8/142/10/151/9/16
f2/2/178/11/186/12/194/4/20
f7/13/211/1/223/3/235/14/24
这个文件看起来稍复杂一些,用到了许多关键词,你可以对照前面的列表查看一下每个关键词的意思。
解释一下:
"vt1.0000000.000000"这句"vt"代表点的贴图坐标。
"vn0.0000000.000000-1.000000"这句"vn"代表点的法线。
"soff"表示关闭光滑组。
"usemtlinitialShadingGroup"表示使用的材质。
"f7/13/21"这时在面的数据中多了贴图坐标uv点和法线的索引号,索引号分别用左斜线(/)隔开。
格式:
"f顶点索引/uv点索引/法线索引"。
"gpCube1"表示组,这里的成组与Maya中的成组不一样,这里的成组是指把"gpCube1"后出现的面都结合到一起,组成一个整的多边形几何体。
把"cube.obj"文件修改一下就知道成组的意思了。
把"soff"这句后面的代码替换成以下代码:
usemtlinitialShadingGroup
gpCube_Face1
f1/1/12/2/24/4/33/3/4
gpCube_Face2
f3/3/54/4/66/6/75/5/8
gpCube_Face3
f5/5/96/6/108/8/117/7/12
gpCube_Face4
f7/7/138/8/142/10/151/9/16
gpCube_Face5
f2/2/178/11/186/12/194/4/20
gpCube_Face6
f7/13/211/1/223/3/235/14/24
导入Maya后可以看到,立方体的每个面是分离的,每个面的名称分别是"pCube_Face(1~6)",可见组的名称其实就是单独几何体的名称。
*******************************************************************************************************************
用中文命名几何体(组)并不总是顺利,把"g立方体面1"这行改为"g选择"再试试看,这回导入时模型根本无法出现,只会出现如下的错误信息:
//Error:
line1:
YourOBJfilecontainsalinewhichistoolongtobeparsed.Pleaseedityourobjfile.//
//Error:
line1:
Errorreadingfile.//
由此可见,物体命名的不规范也是导致OBJ文件出错的原因之一。
关于Maya的物体命名,英文名是很保险的,标点符号中只有下划线(_)可用,数字不能用放到名称的开头,尽量不要用中、日、韩等双字节文字。
OBJ文件不支持有孔的多边形面。
举个例子:
选择Maya的创建多边形工具(Polygons->CreatePolyonTool),在视图中画一个四边形,不要按回车,按Ctrl在四边形中间点一下,可以继续在四边形中挖一个洞。
把这个有孔的多边形存成OBJ格式,在导入Maya时,会发现多边形少了一块。
如果你把这也看成错误,现在至少你已经知道错误的原因了,就是OBJ文件不支持有孔的多边形面。
********************************************************************************************************************
OBJ文件不包含面的颜色定义信息,不过可以引用材质库,材质库信息储存在一个后缀是".mtl"的独立文件中。
关键字"mtllib"即材质库的意思。
材质库中包含材质的漫射(diffuse),环境(ambient),光泽(specular)的RGB(红绿蓝)的定义值,以及反射(specularity),折射(refraction),透明度(transparency)等其它特征。
"usemtl"指定了材质之后,以后的面都是使用这一材质,直到遇到下一个"usemtl"来指定新的材质。
下面的例子说明了指定材质的方法。
CubewithMaterials:
#Thiscubehasadifferentmaterial
#appliedtoeachofitsfaces.
mtllibmaster.mtl
v0.0000002.0000002.000000
v0.0000000.0000002.000000
v2.0000000.0000002.000000
v2.0000002.0000002.000000
v0.0000002.0000000.000000
v0.0000000.0000000.000000
v2.0000000.0000000.000000
v2.0000002.0000000.000000
#8vertices
gfront
usemtlred
f1234
gback
usemtlblue
f8765
gright
usemtlgreen
f4378
gtop
usemtlgold
f5148
gleft
usemtlorange
f5621
gbottom
usemtlpurple
f2673
#6elements
********************************************************************************************************************
贝塞尔片面(BezierPatch):
Maya不能导出OBJ格式的贝塞尔片面,却能够导入它。
导入的贝塞尔片面自动转换为Nurbs表面。
#3.0Bezierpatch
v-5.000000-5.0000000.000000
v-5.000000-1.6666670.000000
v-5.0000001.6666670.000000
v-5.0000005.0000000.000000
v-1.666667-5.0000000.000000
v-1.666667-1.6666670.000000
v-1.6666671.6666670.000000
v-1.6666675.0000000.000000
v1.666667-5.0000000.000000
v1.666667-1.6666670.000000
v1.6666671.6666670.000000
v1.6666675.0000000.000000
v5.000000-5.0000000.000000
v5.000000-1.6666670.000000
v5.0000001.6666670.000000
v5.0000005.0000000.000000
#16vertices
cstypebezier
deg33
#Exampleoflinecontinuation
surf0.0000001.0000000.0000001.0000001314\
1516910111256781234
parmu0.0000001.000000
parmv0.0000001.000000
end
#1element
***************************************************************************************************************
基数曲线(CardinalCurve):
Maya好像不支持OBJ格式的曲线,导入时不会出现错误信息,却也不会出现曲线。
#3.0Cardinalcurve
v0.9400001.3400000.000000
v-0.6700000.8200000.000000
v-0.770000-0.9400000.000000
v1.030000-1.3500000.000000
v3.070000-1.3100000.000000
#6vertices
cstypecardinal
deg3
curv0.0000003.000000123456
parmu0.0000001.0000002.0000003.000000end
#1element
******************************************************************************************************************
贴图映射(Texture-Mapped):
#A2x2squaremappedwitha1x1square
#texturestretchedtofitthesquareexactly.
mtllibmaster.mtl
v0.0000002.0000000.000000
v0.0000000.0000000.000000
v2.0000000.0000000.000000
v2.0000002.0000000.000000
vt0.0000001.0000000.000000
vt0.0000000.0000000.000000
vt1.0000000.0000000.000000
vt1.0000001.0000000.000000
#4vertices
usemtlwood
#Thefirstnumberisthepoint,
#thentheslash,
#andthesecondisthetexturepoint
f1/12/23/34/4
#1element
***********************************************************************************************************
说下顶点索引吧。
我们知道,对于每一个三角形,都需要用3个顶点来表示。
例如在上面的立方体模型中,一共有6×2×3=36个顶点。
仔细想想就会知道,在这36个顶点中,又相当数量的顶点是重合的。
如果把这些重合的顶点都一一表示出来,就太浪费存储空间了。
于是,我们提出了顶点索引的想法,解决空间占用问题。
顶点索引的思想是建立两个数组,一个数组用于存储模型中所有的顶点坐标值,另一个数组则存储每一个表面所对应的三个顶点在第一个数组中的
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- obj 文件格式 mtl