带纹理的obj模型
一般带纹理的obj模型需要有以下三个文件,分别是.obj
文件,.mtl
纹理库文件,还有纹理贴图(这里是.jpg
)如图所示:
用记事本或者其他工具打开查看.obj
文件的内部结构如下图所示:
详细讲解下.obj
文件结构
#
代表文件的注释,用来描述具体的内容注释,当读到#时,可跳过该行。mtllib xxx.mtl
代表obj文件中包含纹理库信息(如右图所示,纹理信息后面详细讲解)
v -8.6007 1.3993 10.0000
- 格式:
v (vertices) x y z
意义:每个顶点的坐标
vt 0.0000 1.0000 0.0000
- 格式:
vt (vertex texture) u v
或者vt u v w
通常是0-1
意义:纹理坐标
vn 0.0000 0.0000 -1.0000
- 格式:
vn (vertex normal) x y z
意义:顶点法矢方向
f 1/1/1 2/2/1 3/3/1
- 格式 :f
v/vt/vn v/vt/vn v/vt/vn
(顶点索引 / 纹理坐标索引 / 顶点法向量索引
)
意义:构成的面
注意:其中面的构成可以只由:v、v/vt、v//vn(两斜杠)、v/vt/vn等情况构成,且顶点的个数也不一定要为3个,可以大于等于3如下所示:表示为5边形的面结构
f 1 2 3 4 5
仅包含顶点f v1 v2 v3 ....
包含顶点和纹理f v1/vt1 v2/vt2 v3/vt3 ...
包含顶点纹理和法线f v1/vt1/vn1 v2/vt2/vn2 v3/vt3/vn3 ...
包括顶点和法线f v1
- Group声明用于组织模型的单元(element)以及简化数据操作
o:代表object,表示不同的对象名称
对象是由组构成,比如一个城镇是一个对象,它有许多房子,每个房子都被认为是一个组,而每个房子又包含了很多子组,比如窗户,们,墙,屋顶等。
g:代表group,顶点或者三角面片的集合名称
组是由一系列面构成,这些面使用同样的属性,比如同样的材质。
s:代表smooth
s 1
...
s 2
...
smooth shading还可以被关闭
s off
``
`
# 材质引用
一个材质库是一个伴随.obj文件的独立文件,它为每个组定义了材质。.obj文件常常会包含一个材质库文件,有时它还会包含多个材质库文件。
包含mtl文件
```cpp
mtllib xxx.mtl
...
使用mtl文件
usemtl xxx
...
mtl材质文件
#
# Wavefront material file
# Converted by the DEEP Exploration 2.1.12.1218
# Right Hemisphere, LTD
# http:
#
newmtl inside
Ka 0.4 0.4 0.4
Kd 0.587609 0.587609 0.587609
Ks 0.071744 0.071744 0.071744
illum
Ns 32
newmtl outside
Ka 0 0 0
Kd 1 1 1
Ks 0.384296 0.194061 0.174387
illum 2
Ns 64
map_Kd cup.jpg
设置完成后打开obj文件得到的模型如下所示:
推荐参考库文件
tiny_obj_loader
tiny_obj_loader
assimp
assimp
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)