1.obj 文件格式
mtllib patrick.mtl
# 610 Vertices
v 0.043767 0.212379 0.006323
v 0.054958 0.165363 0.004953
v 0.076992 0.163141 0.127957
v 0.064977 0.211497 0.150498
v 0.125207 0.162172 0.206775
...//忽略
# 3492 Texture Coordinates
vt 0.4431 0.9599
vt 0.4707 0.9791
vt 0.4898 0.9444
vt 0.4431 0.9599
vt 0.4898 0.9444
vt 0.4699 0.9187
vt 0.4699 0.9187
vt 0.4898 0.9444
vt 0.5087 0.9197
...//忽略
# 3492 Vertex Normals
vn -0.696479 -0.717388 -0.016476
vn -0.751117 -0.660094 0.009993
vn -0.589625 -0.789677 0.169566
vn -0.616143 -0.787612 -0.00589
vn -0.589625 -0.789677 0.169566
vn -0.764593 -0.557964 0.322604
vn -0.764593 -0.557964 0.322604
vn -0.589625 -0.789677 0.169566
...//忽略
# body2, 1164 grouped triangles
usemtl pat
o body2
g body2
f 1/1/1 2/2/2 3/3/3
f 1/4/4 3/5/5 4/6/6
f 4/7/7 3/8/8 5/9/9
f 4/10/10 5/11/11 6/12/12
f 6/13/13 5/14/14 7/15/15
...
顶点数据(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里的面的索引可正可负,为正数时是指顶点的绝对索引,为负时(比如:f -a -b -c),表示从该面位置开始,倒数的第a,b,c个顶点,vn,vt索引也一样。
OBJ文件不包含面的颜色定义信息,不过可以引用材质库,材质库信息储存在一个后缀是".mtl"的独立文件中。关键字"mtllib"即材质库的意思。
材质库中包含材质的漫射(diffuse),环境(ambient),光泽(specular)的RGB(红绿蓝)的定义值,以及反射(specularity),折射(refraction),透明度(transparency)等其它特征。
"usemtl"指定了材质之后,以后的面都是使用这一材质,直到遇到下一个"usemtl"来指定新的材质。
引用自百度百科
https://baike.baidu.com/item/obj%E6%96%87%E4%BB%B6/3574019
2.mtl文件格式
# Material file for patrick.obj
newmtl patty
Ns 0
d 1
illum 2
Kd 0.8 0.8 0.8
Ks 0.0 0.0 0.0
Ka 0.2 0.2 0.2
map_Kd Patty_Wagon.png
newmtl pat
Ns 0
d 1
illum 2
Kd 0.8 0.8 0.8
Ks 0.0 0.0 0.0
Ka 0.2 0.2 0.2
map_Kd Char_Patrick.png
newmtl sb
Ns 0
d 1
illum 2
Kd 0.8 0.8 0.8
Ks 0.0 0.0 0.0
Ka 0.2 0.2 0.2
map_Kd Spongebob_SquarePants.png
单独一个.mtl文件包含多个材质。材质在文件中逐个定义,每一条语句以newmtl起首。
材质的阴影色(ambient color)用Ka声明。颜色用RGB定义,每条通道的值从0到1之间取。
Ka 1.000 1.000 1.000 # 白色
类似地,固有色(diffuse color)用Kd。
Kd 1.000 1.000 1.000 # 白色
高光色(specular color)用Ks。带权高光色则用高光系数Ns表示。
Ks 0.000 0.000 0.000 # 黑色(即关闭高光)
Ns 10.000 # 范围从0到1000
材质可以是透明的,即是说“溶解的”。与真透明度不同,其结果并不依赖于物体厚度。
d 0.9 # 有些用'd'实现
Tr 0.9 # 其他的用'Tr'
每个材质允许使用多照明模型。枚举如下:
- 色彩开,阴影色关
- 色彩开,阴影色开
- 高光开
- 反射开,光线追踪开
- 透明: 玻璃开 反射:光线追踪开
- 反射:菲涅尔衍射开,光线追踪开
- 透明:折射开 反射:菲涅尔衍射关,光线追踪开
- 透明:折射开 反射:菲涅尔衍射开,光线追踪开
- 反射开,光线追踪关
- 透明: 玻璃开 反射:光线追踪关
- 投射阴影于不可见表面
illum 2
5.2 纹理贴图
带纹理材质使用如上相同的属性,并额外定义纹理贴图。
newmtl Textured
Ka 1.000 1.000 1.000
Kd 1.000 1.000 1.000
Ks 0.000 0.000 0.000
d 1.0
illum 2
map_Ka ***.png # 阴影色纹理贴图
map_Kd ***.png # 固有色纹理贴图 (多数情况下与其阴影色纹理贴图相同)
map_Ks ***.png # 高光色纹理贴图
map_d ***.png # alpha通道纹理贴图
map_bump ***.png # 凹凸贴图
bump ***.png # 也有用'bump'而非'map_Bump'标签
引用自 https://blog.csdn.net/weiming8517/article/details/47037225
网友评论