LapuEngine·Obj模型
基于OpenGL的图形渲染器(及其他...
概括
一个obj模型通常包含obj文件和mtl文件。
obj文件包含模型的点面信息,顶点信息通常有顶点坐标、切线坐标、法线坐标,片面信息包含每个片面对应的顶点构成信息。
mtl是材质文件,内含材质信息。
obj文件
以下是一个obj文件的内容:
# Blender v2.83.5 OBJ File: ''
# www.blender.org
mtllib swing.mtl
o rock_2.001_Mesh.017
v 1.484332 -1.308444 0.575933
v 1.512965 -1.218208 0.148136
//...
vt 0.216167 0.400625
vt 0.079999 0.660826
//...
vn -0.8448 0.5165 0.1399
vn 0.9827 -0.1613 0.0913
//...
usemtl stones
s 1
f 1/1/1 2/2/2 3/3/3 4/4/4
f 5/5/5 6/6/6 7/7/7 8/8/8
//...
o leafs.001_Mesh.018
v 1.910345 -0.323583 0.287742
v 1.977330 -0.045935 0.327455
//...
vt 0.291992 0.755497
vt 0.245138 0.766754
//...
vn 0.3066 0.2977 0.9041
vn 0.3245 0.3208 0.8898
//...
usemtl gras_and_veg
s 1
f 918/1378/1412 919/1379/1413 920/1380/1414 917/1381/1415
f 922/1382/1416 923/1383/1417 924/1384/1418 921/1385/1419
//...
- #:注释
- mtlib:指定材质文件名,材质文件详解见下文
- o:在obj包含多个mesh时指定mesh名,用blender打开模型,与其中的mesh名相同
- v:顶点坐标
- vt:切线坐标
- vn:法线坐标
- usemtl:指定当前mesh使用的材质
-
s:是否开启smooth shading。
s off
关闭,s 1
开启 -
f:表面信息。包含顶点索引、纹理坐标索引、顶点法线索引,只有顶点索引是必须,其他可以没有。每个面包含至少三个顶点,每个顶点包含信息格式为
v/vt/vn
包含多mesh的Obj模型按上述顺序依次记录mesh信息。
mtl文件
以上面那个模型的mtl文件为例:
newmtl gras_and_veg
Ns 18.000005
Ka 1.000000 1.000000 1.000000
Kd 0.588000 0.588000 0.588000
Ks 0.000000 0.000000 0.000000
Ke 0.000000 0.000000 0.000000
Ni 1.450000
d 1.000000
illum 1
map_Kd DAE\semester 2\game graphics\patch of heavenDAE7_VanderMeiren_Sander_PatchofHeaven\tex_VegAndSwing.jpg
map_d DAE\semester 2\game graphics\patch of heavenDAE7_VanderMeiren_Sander_PatchofHeaven\tex_VegAndSwing_Op.jpg
newmtl stones
Ns 18.000005
Ka 1.000000 1.000000 1.000000
Kd 0.588000 0.588000 0.588000
Ks 0.000000 0.000000 0.000000
Ke 0.000000 0.000000 0.000000
Ni 1.450000
d 1.000000
illum 1
map_Kd DAE\semester 2\game graphics\patch of heavenDAE7_VanderMeiren_Sander_PatchofHeaven\tex_rocks.jpg
- newmtl:声明材质名称
- Ns:specular exponent
- Ka:Ambient
- Kd:Diffuse
- Ks:Specular
- Ke:Emission
- Ni:optical density
- d:Alpha,或者说dissolve程度
- illum:光照模型,详细哪几种看这里
- map_Kd:diffuse贴图,同理用其他后缀就是其他属性的贴图
以上并不是obj和mtl文件全部属性,有不少没有列举但是并不必须的属性。
LapuEngine记录
mtl文件需要手动修改,将贴图路径改为引擎文件对应路径。
obj模型导入功能在Model.h
中。使用外部库assimp读取obj文件和贴图。顶点读取没啥问题(目前),材质贴图的读取目前只限diffuse、specular、normal、height maps这四种。读取结果返回包含顶点、顶点索引和贴图信息的Mesh
(定义于Mesh.h
,根据模型信息完成OpenGL相关绑定工作并进行绘制)。
Model twobsan("Model/2Bsan.obj"); //创建新模型,指定obj文件路径