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
//...

包含多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

以上并不是obj和mtl文件全部属性,有不少没有列举但是并不必须的属性。

LapuEngine记录

mtl文件需要手动修改,将贴图路径改为引擎文件对应路径。

obj模型导入功能在Model.h中。使用外部库assimp读取obj文件和贴图。顶点读取没啥问题(目前),材质贴图的读取目前只限diffuse、specular、normal、height maps这四种。读取结果返回包含顶点、顶点索引和贴图信息的Mesh(定义于Mesh.h,根据模型信息完成OpenGL相关绑定工作并进行绘制)。

Model twobsan("Model/2Bsan.obj"); //创建新模型,指定obj文件路径

参考

  1. MTL material format (Lightwave, OBJ)·详细定义