OpenGL系统设计-高级3D模型接口之OBJ模型(1)
2009-12-26 19:28
399 查看
<!--
/* Font Definitions */
@font-face
{font-family:Courier;
panose-1:2 7 4 9 2 2 5 2 4 4;
mso-font-charset:0;
mso-generic-font-family:modern;
mso-font-format:other;
mso-font-pitch:fixed;
mso-font-signature:3 0 0 0 1 0;}
@font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;
mso-font-alt:SimSun;
mso-font-charset:134;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:3 135135232 16 0 262145 0;}
@font-face
{font-family:黑体;
panose-1:2 1 6 0 3 1 1 1 1 1;
mso-font-alt:SimHei;
mso-font-charset:134;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:1 135135232 16 0 262144 0;}
@font-face
{font-family:"/@宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;
mso-font-charset:134;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:3 135135232 16 0 262145 0;}
@font-face
{font-family:"/@黑体";
panose-1:2 1 6 0 3 1 1 1 1 1;
mso-font-charset:134;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:1 135135232 16 0 262144 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
mso-pagination:none;
font-size:10.5pt;
mso-bidi-font-size:12.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:宋体;
mso-font-kerning:1.0pt;}
h1
{mso-style-parent:"";
mso-style-next:"标题 2";
margin-top:12.0pt;
margin-right:0cm;
margin-bottom:12.0pt;
margin-left:21.6pt;
text-align:justify;
text-justify:inter-ideograph;
text-indent:-21.6pt;
mso-pagination:widow-orphan;
page-break-after:avoid;
mso-outline-level:1;
mso-list:l0 level1 lfo1;
tab-stops:list 21.6pt;
font-size:16.0pt;
font-family:Arial;
mso-fareast-font-family:黑体;
mso-bidi-font-family:"Times New Roman";
mso-font-kerning:0pt;
mso-bidi-font-weight:normal;}
h2
{mso-style-parent:"";
mso-style-next:正文;
margin-top:12.0pt;
margin-right:0cm;
margin-bottom:12.0pt;
margin-left:28.8pt;
text-align:justify;
text-justify:inter-ideograph;
text-indent:-28.8pt;
mso-pagination:widow-orphan;
page-break-after:avoid;
mso-outline-level:2;
mso-list:l0 level2 lfo1;
tab-stops:list 28.8pt;
font-size:12.0pt;
font-family:Arial;
mso-fareast-font-family:黑体;
mso-bidi-font-family:"Times New Roman";
font-weight:normal;}
h3
{mso-style-next:正文;
margin-top:13.0pt;
margin-right:0cm;
margin-bottom:13.0pt;
margin-left:36.0pt;
text-indent:-36.0pt;
line-height:173%;
mso-pagination:lines-together;
page-break-after:avoid;
mso-outline-level:3;
mso-list:l0 level3 lfo1;
tab-stops:list 36.0pt;
font-size:12.0pt;
mso-bidi-font-size:16.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:黑体;
mso-font-kerning:1.0pt;
font-weight:normal;
mso-bidi-font-weight:bold;}
p.MsoBodyText, li.MsoBodyText, div.MsoBodyText
{margin-top:0cm;
margin-right:0cm;
margin-bottom:6.0pt;
margin-left:0cm;
mso-pagination:none;
font-size:10.5pt;
mso-bidi-font-size:12.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:宋体;
mso-font-kerning:1.0pt;}
p.MsoBodyTextFirstIndent, li.MsoBodyTextFirstIndent, div.MsoBodyTextFirstIndent
{mso-style-update:auto;
mso-style-parent:正文文本;
mso-style-link:" Char Char";
margin:0cm;
margin-bottom:.0001pt;
text-indent:19.85pt;
mso-pagination:none;
font-size:10.5pt;
font-family:"Times New Roman";
mso-fareast-font-family:宋体;
mso-ansi-language:ZH-CN;}
p.a, li.a, div.a
{mso-style-name:正文(首行不缩进);
margin:0cm;
margin-bottom:.0001pt;
line-height:150%;
mso-pagination:none;
mso-layout-grid-align:none;
text-autospace:none;
font-size:10.5pt;
mso-bidi-font-size:10.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:宋体;}
span.CharChar
{mso-style-name:" Char Char";
mso-style-locked:yes;
mso-style-link:正文首行缩进;
mso-ansi-font-size:10.5pt;
mso-bidi-font-size:10.5pt;
font-family:宋体;
mso-fareast-font-family:宋体;
mso-ansi-language:ZH-CN;
mso-fareast-language:ZH-CN;
mso-bidi-language:AR-SA;}
/* Page Definitions */
@page
{mso-page-border-surround-header:no;
mso-page-border-surround-footer:no;}
@page Section1
{size:612.0pt 792.0pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;
mso-header-margin:36.0pt;
mso-footer-margin:36.0pt;
mso-paper-source:0;}
div.Section1
{page:Section1;}
/* List Definitions */
@list l0
{mso-list-id:1666475049;
mso-list-template-ids:-28945502;}
@list l0:level1
{mso-level-style-link:"标题 1";
mso-level-text:%1;
mso-level-tab-stop:21.6pt;
mso-level-number-position:left;
margin-left:21.6pt;
text-indent:-21.6pt;}
@list l0:level2
{mso-level-style-link:"标题 2";
mso-level-text:"%1/.%2";
mso-level-tab-stop:28.8pt;
mso-level-number-position:left;
margin-left:28.8pt;
text-indent:-28.8pt;}
@list l0:level3
{mso-level-style-link:"标题 3";
mso-level-text:"%1/.%2/.%3";
mso-level-tab-stop:36.0pt;
mso-level-number-position:left;
margin-left:36.0pt;
text-indent:-36.0pt;}
@list l0:level4
{mso-level-tab-stop:1.0cm;
mso-level-number-position:left;
margin-left:46.8pt;
text-indent:-34.0pt;}
@list l0:level5
{mso-level-text:%5);
mso-level-tab-stop:1.0cm;
mso-level-number-position:left;
margin-left:46.8pt;
text-indent:-34.0pt;}
@list l0:level6
{mso-level-number-format:alpha-lower;
mso-level-text:%6);
mso-level-tab-stop:1.0cm;
mso-level-number-position:left;
margin-left:46.8pt;
text-indent:-34.0pt;}
@list l0:level7
{mso-level-number-format:roman-lower;
mso-level-text:%7;
mso-level-tab-stop:1.0cm;
mso-level-number-position:left;
margin-left:46.8pt;
text-indent:-34.0pt;}
@list l0:level8
{mso-level-text:"%1/.%2/.%3/.%4/.%5/.%6/.%7/.%8";
mso-level-tab-stop:72.0pt;
mso-level-number-position:left;
margin-left:72.0pt;
text-indent:-72.0pt;}
@list l0:level9
{mso-level-text:"%1/.%2/.%3/.%4/.%5/.%6/.%7/.%8/.%9";
mso-level-tab-stop:79.2pt;
mso-level-number-position:left;
margin-left:79.2pt;
text-indent:-79.2pt;}
ol
{margin-bottom:0cm;}
ul
{margin-bottom:0cm;}
-->
1.1
这里的
OBJ文件不是我们常见的程序编译生产的目标文件,而是一种定义物体几何模型的
3D文件,最初是
Wavefront的标准
3D模型文件,后来被广泛应用到各种应用软件中。
OBJ文件可以是二进制文件,也可以是
ASCII文件,其中二进制格式文件的扩展名是
.mod,
ASCII格式文件的扩展名是
.obj。
OBJ
文件支持多边形几何体和自由形状的几何体。多边形几何体使用点、线、面来表示物体,而自由形状几何体使用曲线、曲面来表示物体。
在
OBJ文件中数据的表达方式是
type data
type表示数据类型,
data表示对应的数据。如
v 1.0 0.0 1.0就表示一个坐标点(
1.0,
0.0, 1.0)。
OBJ文件中可以包含以下数据类型,括号内是对应数据的命令名称。
1
、顶点数据
几何顶点(v)
纹理顶点(vt)
顶点法向量(vn)
参数空间顶点(vp)
2
、自由形状的曲线/
曲面
Bezier
、B
样条、Cardinal
、Taylor(cstype)
度数(deg)
基准矩阵(bmat)
步长(step)
3
、基本元素
点(p)
线(l)
面(f)
曲线(curv)
2
维曲线(curv2)
曲面(surf)
4
、自由形状曲线/
曲面语句
参数值(parm)
外部调整循环 (trim
)
内部调整循环(hole
)
特殊曲线 (scrv
)
特殊点 (sp
)
完成语句 (end
)
自由形体面之间的连接 (con
)
OBJ整个文件的结构包含
组
•
组名 (g
)
•
光滑组(s
)
•
合并组 (mg
)
•
物体名 (o
)
显示/
渲染属性
•
斜角插值(bevel
)
•
颜色插值 (c_interp
)
•
淡入淡出插值 (d_interp
)
•
细节级别 (lod
)
•
材质名称 (usemtl
)
•
材质库 (mtllib
)
• shadow casting (shadow_obj
)
•
光线跟踪 (trace_obj
)
•
曲线逼近方法 (ctech
)
•
曲面逼近方法 (stech
)
下面我们再来举例说明
OBJ的文件格式。先看一个四边形的
OBJ文件
square.obj。
#
square.obj
v 0.000000 2.000000
0.000000
v 0.000000 0.000000 0.000000
v 2.000000 0.000000 0.000000
v 2.000000 2.000000 0.000000
f 1 2 3 4
其中
4个
v 表示四个顶点坐标,
f 表示多边形,最后一行表示一个有四个顶点的多边形。其顶点是顶点序号来表示的。
#
表示注释。
又如
#
twosquare.obj
v 0.000000 2.000000
0.000000
v 0.000000 0.000000
0.000000
v 2.000000 0.000000
0.000000
v 2.000000 2.000000
0.000000
v 4.000000 0.000000
-1.255298
v 4.000000 2.000000
-1.255298
vn 0.000000 0.000000
1.000000
vn 0.000000 0.000000
1.000000
vn 0.276597 0.000000
0.960986
vn 0.276597 0.000000
0.960986
vn 0.531611 0.000000
0.846988
vn 0.531611 0.000000
0.846988
# 6 vertices
# 6 normals
g all
s 1
f 1//1 2//2 3//3
4//4
f 4//4 3//3 5//5
6//6
# 2 elements
对上面
twosqaure.obj
的数据解释如下
:
vn
表示顶点法向量
,
g
表示
group
,
all
是
group
的名字。下面的两个
face
都属于这个
group,直到下一个
g 命令或者文件结束为止。
s 表示平滑组,而1是group all的序号。
在最后两行中
1//1中,第一个
1表示顶点序号,后一个
1表示顶点法向量序号,中间表示纹理向量序号,对应于由
vt 命令定义的各行。
2//2,
3//3,
4//4,含义一样。
接下来再看一个利用材质的例子
colorcube.obj文件。
#
colorcube.obj
mtllib master.mtl
#
本OBJ
文件要用到一个材质文件master.mtl
,这个文件
#
和OBJ
文件在同一个目录下
v 0.000000 2.000000
2.000000
v 0.000000 0.000000
2.000000
v 2.000000 0.000000
2.000000
v 2.000000 2.000000
2.000000
v 0.000000 2.000000
0.000000
v 0.000000 0.000000
0.000000
v 2.000000 0.000000
0.000000
v 2.000000 2.000000
0.000000
# 8
个顶点
g front
#
组
front
,到下一个g
结束
usemtl red
#
表示此后的物体使用名叫red
的材质,直到下一个usemtl
命令为止。
#
材质red
由master.mtl
定义
f 1 2 3 4
g back
usemtl blue
f 8 7 6 5
g right
usemtl green
f 4 3 7 8
g top
usemtl gold
f 5 1 4 8
g left
usemtl orange
f 5 6 2 1
g bottom
usemtl purple
f 2 6 7 3
# 6 elements
v 0.000000 2.000000
0.000000
v 0.000000 0.000000
0.000000
v 2.000000 0.000000
0.000000
v 2.000000 2.000000
0.000000
vt 0.000000 1.000000
0.000000
vt 0.000000 0.000000 0.000000
vt 1.000000 0.000000
0.000000
vt 1.000000 1.000000
0.000000
# 4 vertices
usemtl copper
f 1/1 2/2 3/3 4/4
master.mtl文件的内容是:
#master.mtl
newmtl red
#
定义一个名叫red
的材质
Ka 0 0 0
# Ka,Kd,Ks,illum,Ns
分别定义环境光、漫射光、镜面光、散射
#
光和#emission
和 shiness
参数
Kd 1 0 0
newmtl blue
Ka 0 0 0
Kd 0 0 1
newmtl green
Ka 0 0 0
Kd 0 1 0
newmtl gold
Ka 0.247250 0.199500
0.074500
Kd 0.751640 0.606480
0.226480
Ks 0.628281 0.555802
0.366065
illum 0
Ns 51.200001
newmtl orange
Ka 0 0 0
Kd 0.9 0.5 0
newmtl purple
Ka 0 0 0
Kd 0.7 0 0.9
newmtl copper
Ka 0.329412 0.223529
0.027451
Kd 0.780392 0.568627
0.113725
Ks 0.992157 0.941176
0.807843
Ns 27.897400
上面的几个例子涉及的是
OBJ文件中最基本的数据,其他的数据和命令的详细说明可以参考
OBJ文件规范。该规范文件可在所附的
CD-ROM中找到。
/* Font Definitions */
@font-face
{font-family:Courier;
panose-1:2 7 4 9 2 2 5 2 4 4;
mso-font-charset:0;
mso-generic-font-family:modern;
mso-font-format:other;
mso-font-pitch:fixed;
mso-font-signature:3 0 0 0 1 0;}
@font-face
{font-family:宋体;
panose-1:2 1 6 0 3 1 1 1 1 1;
mso-font-alt:SimSun;
mso-font-charset:134;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:3 135135232 16 0 262145 0;}
@font-face
{font-family:黑体;
panose-1:2 1 6 0 3 1 1 1 1 1;
mso-font-alt:SimHei;
mso-font-charset:134;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:1 135135232 16 0 262144 0;}
@font-face
{font-family:"/@宋体";
panose-1:2 1 6 0 3 1 1 1 1 1;
mso-font-charset:134;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:3 135135232 16 0 262145 0;}
@font-face
{font-family:"/@黑体";
panose-1:2 1 6 0 3 1 1 1 1 1;
mso-font-charset:134;
mso-generic-font-family:auto;
mso-font-pitch:variable;
mso-font-signature:1 135135232 16 0 262144 0;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{mso-style-parent:"";
margin:0cm;
margin-bottom:.0001pt;
mso-pagination:none;
font-size:10.5pt;
mso-bidi-font-size:12.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:宋体;
mso-font-kerning:1.0pt;}
h1
{mso-style-parent:"";
mso-style-next:"标题 2";
margin-top:12.0pt;
margin-right:0cm;
margin-bottom:12.0pt;
margin-left:21.6pt;
text-align:justify;
text-justify:inter-ideograph;
text-indent:-21.6pt;
mso-pagination:widow-orphan;
page-break-after:avoid;
mso-outline-level:1;
mso-list:l0 level1 lfo1;
tab-stops:list 21.6pt;
font-size:16.0pt;
font-family:Arial;
mso-fareast-font-family:黑体;
mso-bidi-font-family:"Times New Roman";
mso-font-kerning:0pt;
mso-bidi-font-weight:normal;}
h2
{mso-style-parent:"";
mso-style-next:正文;
margin-top:12.0pt;
margin-right:0cm;
margin-bottom:12.0pt;
margin-left:28.8pt;
text-align:justify;
text-justify:inter-ideograph;
text-indent:-28.8pt;
mso-pagination:widow-orphan;
page-break-after:avoid;
mso-outline-level:2;
mso-list:l0 level2 lfo1;
tab-stops:list 28.8pt;
font-size:12.0pt;
font-family:Arial;
mso-fareast-font-family:黑体;
mso-bidi-font-family:"Times New Roman";
font-weight:normal;}
h3
{mso-style-next:正文;
margin-top:13.0pt;
margin-right:0cm;
margin-bottom:13.0pt;
margin-left:36.0pt;
text-indent:-36.0pt;
line-height:173%;
mso-pagination:lines-together;
page-break-after:avoid;
mso-outline-level:3;
mso-list:l0 level3 lfo1;
tab-stops:list 36.0pt;
font-size:12.0pt;
mso-bidi-font-size:16.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:黑体;
mso-font-kerning:1.0pt;
font-weight:normal;
mso-bidi-font-weight:bold;}
p.MsoBodyText, li.MsoBodyText, div.MsoBodyText
{margin-top:0cm;
margin-right:0cm;
margin-bottom:6.0pt;
margin-left:0cm;
mso-pagination:none;
font-size:10.5pt;
mso-bidi-font-size:12.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:宋体;
mso-font-kerning:1.0pt;}
p.MsoBodyTextFirstIndent, li.MsoBodyTextFirstIndent, div.MsoBodyTextFirstIndent
{mso-style-update:auto;
mso-style-parent:正文文本;
mso-style-link:" Char Char";
margin:0cm;
margin-bottom:.0001pt;
text-indent:19.85pt;
mso-pagination:none;
font-size:10.5pt;
font-family:"Times New Roman";
mso-fareast-font-family:宋体;
mso-ansi-language:ZH-CN;}
p.a, li.a, div.a
{mso-style-name:正文(首行不缩进);
margin:0cm;
margin-bottom:.0001pt;
line-height:150%;
mso-pagination:none;
mso-layout-grid-align:none;
text-autospace:none;
font-size:10.5pt;
mso-bidi-font-size:10.0pt;
font-family:"Times New Roman";
mso-fareast-font-family:宋体;}
span.CharChar
{mso-style-name:" Char Char";
mso-style-locked:yes;
mso-style-link:正文首行缩进;
mso-ansi-font-size:10.5pt;
mso-bidi-font-size:10.5pt;
font-family:宋体;
mso-fareast-font-family:宋体;
mso-ansi-language:ZH-CN;
mso-fareast-language:ZH-CN;
mso-bidi-language:AR-SA;}
/* Page Definitions */
@page
{mso-page-border-surround-header:no;
mso-page-border-surround-footer:no;}
@page Section1
{size:612.0pt 792.0pt;
margin:72.0pt 90.0pt 72.0pt 90.0pt;
mso-header-margin:36.0pt;
mso-footer-margin:36.0pt;
mso-paper-source:0;}
div.Section1
{page:Section1;}
/* List Definitions */
@list l0
{mso-list-id:1666475049;
mso-list-template-ids:-28945502;}
@list l0:level1
{mso-level-style-link:"标题 1";
mso-level-text:%1;
mso-level-tab-stop:21.6pt;
mso-level-number-position:left;
margin-left:21.6pt;
text-indent:-21.6pt;}
@list l0:level2
{mso-level-style-link:"标题 2";
mso-level-text:"%1/.%2";
mso-level-tab-stop:28.8pt;
mso-level-number-position:left;
margin-left:28.8pt;
text-indent:-28.8pt;}
@list l0:level3
{mso-level-style-link:"标题 3";
mso-level-text:"%1/.%2/.%3";
mso-level-tab-stop:36.0pt;
mso-level-number-position:left;
margin-left:36.0pt;
text-indent:-36.0pt;}
@list l0:level4
{mso-level-tab-stop:1.0cm;
mso-level-number-position:left;
margin-left:46.8pt;
text-indent:-34.0pt;}
@list l0:level5
{mso-level-text:%5);
mso-level-tab-stop:1.0cm;
mso-level-number-position:left;
margin-left:46.8pt;
text-indent:-34.0pt;}
@list l0:level6
{mso-level-number-format:alpha-lower;
mso-level-text:%6);
mso-level-tab-stop:1.0cm;
mso-level-number-position:left;
margin-left:46.8pt;
text-indent:-34.0pt;}
@list l0:level7
{mso-level-number-format:roman-lower;
mso-level-text:%7;
mso-level-tab-stop:1.0cm;
mso-level-number-position:left;
margin-left:46.8pt;
text-indent:-34.0pt;}
@list l0:level8
{mso-level-text:"%1/.%2/.%3/.%4/.%5/.%6/.%7/.%8";
mso-level-tab-stop:72.0pt;
mso-level-number-position:left;
margin-left:72.0pt;
text-indent:-72.0pt;}
@list l0:level9
{mso-level-text:"%1/.%2/.%3/.%4/.%5/.%6/.%7/.%8/.%9";
mso-level-tab-stop:79.2pt;
mso-level-number-position:left;
margin-left:79.2pt;
text-indent:-79.2pt;}
ol
{margin-bottom:0cm;}
ul
{margin-bottom:0cm;}
-->
1.1
OBJ
这里的OBJ文件不是我们常见的程序编译生产的目标文件,而是一种定义物体几何模型的
3D文件,最初是
Wavefront的标准
3D模型文件,后来被广泛应用到各种应用软件中。
OBJ文件可以是二进制文件,也可以是
ASCII文件,其中二进制格式文件的扩展名是
.mod,
ASCII格式文件的扩展名是
.obj。
OBJ
文件支持多边形几何体和自由形状的几何体。多边形几何体使用点、线、面来表示物体,而自由形状几何体使用曲线、曲面来表示物体。
在
OBJ文件中数据的表达方式是
type data
type表示数据类型,
data表示对应的数据。如
v 1.0 0.0 1.0就表示一个坐标点(
1.0,
0.0, 1.0)。
OBJ文件中可以包含以下数据类型,括号内是对应数据的命令名称。
1
、顶点数据
几何顶点(v)
纹理顶点(vt)
顶点法向量(vn)
参数空间顶点(vp)
2
、自由形状的曲线/
曲面
Bezier
、B
样条、Cardinal
、Taylor(cstype)
度数(deg)
基准矩阵(bmat)
步长(step)
3
、基本元素
点(p)
线(l)
面(f)
曲线(curv)
2
维曲线(curv2)
曲面(surf)
4
、自由形状曲线/
曲面语句
参数值(parm)
外部调整循环 (trim
)
内部调整循环(hole
)
特殊曲线 (scrv
)
特殊点 (sp
)
完成语句 (end
)
自由形体面之间的连接 (con
)
OBJ整个文件的结构包含
组
•
组名 (g
)
•
光滑组(s
)
•
合并组 (mg
)
•
物体名 (o
)
显示/
渲染属性
•
斜角插值(bevel
)
•
颜色插值 (c_interp
)
•
淡入淡出插值 (d_interp
)
•
细节级别 (lod
)
•
材质名称 (usemtl
)
•
材质库 (mtllib
)
• shadow casting (shadow_obj
)
•
光线跟踪 (trace_obj
)
•
曲线逼近方法 (ctech
)
•
曲面逼近方法 (stech
)
下面我们再来举例说明
OBJ的文件格式。先看一个四边形的
OBJ文件
square.obj。
#
square.obj
v 0.000000 2.000000
0.000000
v 0.000000 0.000000 0.000000
v 2.000000 0.000000 0.000000
v 2.000000 2.000000 0.000000
f 1 2 3 4
其中
4个
v 表示四个顶点坐标,
f 表示多边形,最后一行表示一个有四个顶点的多边形。其顶点是顶点序号来表示的。
#
表示注释。
又如
#
twosquare.obj
v 0.000000 2.000000
0.000000
v 0.000000 0.000000
0.000000
v 2.000000 0.000000
0.000000
v 2.000000 2.000000
0.000000
v 4.000000 0.000000
-1.255298
v 4.000000 2.000000
-1.255298
vn 0.000000 0.000000
1.000000
vn 0.000000 0.000000
1.000000
vn 0.276597 0.000000
0.960986
vn 0.276597 0.000000
0.960986
vn 0.531611 0.000000
0.846988
vn 0.531611 0.000000
0.846988
# 6 vertices
# 6 normals
g all
s 1
f 1//1 2//2 3//3
4//4
f 4//4 3//3 5//5
6//6
# 2 elements
对上面
twosqaure.obj
的数据解释如下
:
vn
表示顶点法向量
,
g
表示
group
,
all
是
group
的名字。下面的两个
face
都属于这个
group,直到下一个
g 命令或者文件结束为止。
s 表示平滑组,而1是group all的序号。
在最后两行中
1//1中,第一个
1表示顶点序号,后一个
1表示顶点法向量序号,中间表示纹理向量序号,对应于由
vt 命令定义的各行。
2//2,
3//3,
4//4,含义一样。
接下来再看一个利用材质的例子
colorcube.obj文件。
#
colorcube.obj
mtllib master.mtl
#
本OBJ
文件要用到一个材质文件master.mtl
,这个文件
#
和OBJ
文件在同一个目录下
v 0.000000 2.000000
2.000000
v 0.000000 0.000000
2.000000
v 2.000000 0.000000
2.000000
v 2.000000 2.000000
2.000000
v 0.000000 2.000000
0.000000
v 0.000000 0.000000
0.000000
v 2.000000 0.000000
0.000000
v 2.000000 2.000000
0.000000
# 8
个顶点
g front
#
组
front
,到下一个g
结束
usemtl red
#
表示此后的物体使用名叫red
的材质,直到下一个usemtl
命令为止。
#
材质red
由master.mtl
定义
f 1 2 3 4
g back
usemtl blue
f 8 7 6 5
g right
usemtl green
f 4 3 7 8
g top
usemtl gold
f 5 1 4 8
g left
usemtl orange
f 5 6 2 1
g bottom
usemtl purple
f 2 6 7 3
# 6 elements
v 0.000000 2.000000
0.000000
v 0.000000 0.000000
0.000000
v 2.000000 0.000000
0.000000
v 2.000000 2.000000
0.000000
vt 0.000000 1.000000
0.000000
vt 0.000000 0.000000 0.000000
vt 1.000000 0.000000
0.000000
vt 1.000000 1.000000
0.000000
# 4 vertices
usemtl copper
f 1/1 2/2 3/3 4/4
master.mtl文件的内容是:
#master.mtl
newmtl red
#
定义一个名叫red
的材质
Ka 0 0 0
# Ka,Kd,Ks,illum,Ns
分别定义环境光、漫射光、镜面光、散射
#
光和#emission
和 shiness
参数
Kd 1 0 0
newmtl blue
Ka 0 0 0
Kd 0 0 1
newmtl green
Ka 0 0 0
Kd 0 1 0
newmtl gold
Ka 0.247250 0.199500
0.074500
Kd 0.751640 0.606480
0.226480
Ks 0.628281 0.555802
0.366065
illum 0
Ns 51.200001
newmtl orange
Ka 0 0 0
Kd 0.9 0.5 0
newmtl purple
Ka 0 0 0
Kd 0.7 0 0.9
newmtl copper
Ka 0.329412 0.223529
0.027451
Kd 0.780392 0.568627
0.113725
Ks 0.992157 0.941176
0.807843
Ns 27.897400
上面的几个例子涉及的是
OBJ文件中最基本的数据,其他的数据和命令的详细说明可以参考
OBJ文件规范。该规范文件可在所附的
CD-ROM中找到。
相关文章推荐
- OpenGL系统设计-高级3D模型接口之OBJ模型(2)
- OpenGL系统设计-高级3D模型接口之MD2模型(1)
- OpenGL系统设计-高级3D模型接口之MD2模型(2)
- OpenGL系统设计-高级3D模型接口之MD2模型(3)
- 软件工程之系统建模篇【设计接口控制类模型】
- 图像采集系统的Camera Link标准接口设计
- 模型动画系统设计的一些心得
- [学习笔记]UML小结以及基于领域模型的系统设计初步
- 连载:告诉你如何设计一个日访问量千万级别的系统,谈oracle的高级设计和开发(2)
- OpenGL系统设计-扩展建模(3)
- 软件工程之系统建模篇【设计接口类模型】
- 架构设计:系统间通信(4)——IO通信模型和JAVA实践 中篇
- 今天我们来聊一个很高级的话题:如何设计一个大规模远程命令执行系统
- OpenGL系统设计-光照与材质(1)
- 分布式系统接口幂等性设计
- 电商系统中的商品模型的分析与设计
- 基于RBAC模型的权限系统设计(Github开源项目)
- OpenGL -- OBJ 模型加载
- 电商系统中的商品模型的分析与设计—续
- B2C电子商务系统研发——商品数据模型设计