计算机图形学实验几何物体的表示——三角网格的表示与显示(精)

上传人:我** 文档编号:114685347 上传时间:2019-11-12 格式:DOCX 页数:21 大小:480.37KB
返回 下载 相关 举报
计算机图形学实验几何物体的表示——三角网格的表示与显示(精)_第1页
第1页 / 共21页
计算机图形学实验几何物体的表示——三角网格的表示与显示(精)_第2页
第2页 / 共21页
计算机图形学实验几何物体的表示——三角网格的表示与显示(精)_第3页
第3页 / 共21页
计算机图形学实验几何物体的表示——三角网格的表示与显示(精)_第4页
第4页 / 共21页
计算机图形学实验几何物体的表示——三角网格的表示与显示(精)_第5页
第5页 / 共21页
点击查看更多>>
资源描述

《计算机图形学实验几何物体的表示——三角网格的表示与显示(精)》由会员分享,可在线阅读,更多相关《计算机图形学实验几何物体的表示——三角网格的表示与显示(精)(21页珍藏版)》请在金锄头文库上搜索。

1、实验四 几何物体的表示三角网格的表示与显示1. 实验目的l 熟悉三角网格的表示l 熟悉三角网格的显示l 熟悉纹理的显示2. 实验内容l 设计三角网格的数据结构l 解析Obj文件格式的三角网格l 显示三角网格及纹理贴图3. 实验指导存储三角网格数据的文件格式多种多样,常见的文件格式有:l Wavefront OBJ (*.0bj)l 3D Max (*.max, *.3ds)l VRML (*.vrl)l Inventor (*.iv)l PLY (*.ply, *,ply2)本实验主要以OBJ文件为例,了解其数据格式,建立三角网格在内存中的数据结构,从而将文件中的数据读取到内存,并最终显示出来

2、。3.1 OBJ文件格式OBJ文件是Alias|Wavefront公司为他的一套基于工作站的3D建模和动画软件“Advanced Visualizer”开发的一种标准3D模型文件格式,很适合用于3D软件模型之间的数据交换。目前几乎所有知名的3D软件如3dsMax,LightWave,Maya都支持OBJ文件的读写。OBJ文件是一种纯文本文件,可以直接用写字板打开进行查看和编辑修改。这种文件以纯文本的形式存储了模型的顶点、法线和纹理坐标和材质使用信息。OBJ的每一行,都有极其相似的格式,每行的格式如下:前缀 参数1 参数2 参数3 其中,前缀标识了这一行所存储的信息类型,参数则是具体的数据。OB

3、J文件的前缀可以有:前缀说明v表示本行指定一个顶点此前缀后跟着3个单精度浮点数,分别表示顶点的x,y,z坐标值vt表示本行指定一个纹理坐标此前缀后跟着两个单精度浮点数,分别表示此纹理坐标的u,v值vn表示本行指定一个法线向量此前缀后跟着3个单精度浮点数,分别表示顶点法向量x,y,z坐标值f表示本行指定一个表面(Face)此前缀后面的数据见“面的格式说明”usemtl此前缀后只跟着一个参数。该参数指定了从此行之后到下一个以usemtl开头的行之间的所有表面所使用的材质名称。该材质可以在此OBJ文件所附属的MTL文件中找到具体信息。mtllib此前缀后只跟着一个参数,该参数指定了此OBJ文件所使用

4、的材质库文件(*.mtl)的文件路径面的格式说明:每个三角面片的数据由f开头,后面跟组成该三角面片的各顶点的顶点坐标索引,纹理坐标索引,顶点法向索引,其格式为:f 顶点坐标索引/纹理坐标索引/顶点法向索引 其中纹理坐标索引和顶点法向索引可以为空,如果为空的索引位于末尾时,/也可以省略,例如:f 1 2 3这样的行表示以第1、2、3号顶点组成一个三角形,等同于1/ 2/ 3/。f 1/3 2/5 3/4这样的行表示以第1、2、3号顶点组成一个三角形,其中第一个顶点的纹理坐标的索引值为3,第二个顶点的纹理坐标的索引值为5,第三个顶点的纹理坐标的索引值为4。f 1/3/4 2/5/6 3/4/2这样

5、的行表示以第1、2、3号顶点组成一个三角形,其中第一个顶点的纹理坐标的索引值为3,其法线的索引值是4;第二个顶点的纹理坐标的索引值为5,其法线的索引值是6;第三个顶点的纹理坐标的索引值为6,其法线的索引值是2。f 1/4 2/6 3/2这样的行表示以第1、2、3号顶点组成一个三角形,且忽略纹理坐标。其中第一个顶点的法线的索引值是4;第二个顶点的法线的索引值是6;第三个顶点的法线的索引值是2。除此之外,以“#”开头的表示注释,以g开头的表示组的前缀。但这些前缀并不影响模型的外观,因此我们可以忽略它们。下面来看一个具体的实例,该文件是用3dsMax创建的一个长方体存储成OBJ文件的结果:# Max

6、2Obj Version 4.0 Mar 10th, 2001#mtllib ./Box.mtlg# object (null) to come .#v -46.508743 -45.052959 50.796341v 49.442947 -45.052959 50.796341v -46.508743 -45.052959 -48.019585v 49.442947 -45.052959 -48.019585v -46.508743 48.034504 50.796341v 49.442947 48.034504 50.796341v -46.508743 48.034504 -48.019

7、585v 49.442947 48.034504 -48.019585# 8 verticesvt 0.000000 0.000000 0.000000vt 1.000000 0.000000 0.000000vt 0.000000 1.000000 0.000000vt 1.000000 1.000000 0.000000vt 0.000000 0.000000 0.000000vt 1.000000 0.000000 0.000000vt 0.000000 1.000000 0.000000vt 1.000000 1.000000 0.000000vt 0.000000 0.000000

8、0.000000vt 1.000000 0.000000 0.000000vt 0.000000 1.000000 0.000000vt 1.000000 1.000000 0.000000# 12 texture verticesg (null)f 1/10 3/12 4/11f 4/11 2/9 1/10f 5/9 6/10 8/12f 8/12 7/11 5/9f 1/5 2/6 6/8f 6/8 5/7 1/5f 2/1 4/2 8/4f 8/4 6/3 2/1f 4/5 3/6 7/8f 7/8 8/7 4/5f 3/1 1/2 5/4f 5/4 7/3 3/1# 12 facesO

9、bj格式对纹理的支持则是通过关键字mtllib指定的。从上述例子可以看出,mtllib指定了对应于该obj文件的材质文件,材质文件的格式类似于obj的文件格式,也是由关键字前缀+对应的内容组成。newmtl blinn1SGillum 4Ka 0.2 0.2 0.2Kd 1 1 1Ks 0.2 0.2 0.2Tf 1.00 1.00 1.00map_Kd carp.bmpKa,kd,ks分别指定了物体材质中环境光,漫反射光,镜面光的颜色,map_Kd指定了纹理图像的路径,通过该纹理图像的路径,可以读取obj文件对应的纹理图像。3.2 三角网格的数据结构三角网格的数据由几何和连接关系两部分组成,

10、几何包括顶点的x,y,z坐标及顶点的法向量等,连接关系即三角网格是如何连在一块的。如图 3.1所示。 (a) (b)图 0.1 三角网格数据常用的三角网格数据结构包括:l 顶点边(Vertex-Edge)l 顶点面(Vertex-Face)l 邻接矩阵(Adjacency matrix)和邻接表(Adjacency List)l 顶点边面(Vertex-Edge-Face)l 半边结构(Half Edge)在各种数据结构的表示方式中,几何的表示基本一致,可以用链表或者数组的方式加以存储,对于图 0.1.a中的网格,可表示为:顶点坐标v1(x1, y1, z1)v2(x2, y2, z2)v3(

11、x3, y3, z3)v4(x4, y4, z4)v5(x5, y5, z5)v6(x6, y6, z6)区别的地方主要在于连接关系的存储,不同的存储方式决定了顶点、边、面的邻接关系的复杂度:顶点边(Vertex-Edge)的数据结构只包含边的连接关系,对于图 0.1.a中的网格,可表示为:边顶点e1(v1, v3)e2(v1, v2)e3(v2, v3)e4(v2, v4)e5(v3, v5)e6(v3, v6)e7(v4, v6)e8(v4, v5)e9(v5, v6)顶点面(Vertex-Face)的数据结构只包含面的连接关系,对于图 0.1.a中的网格,可表示为:面顶点(CCW)f1(

12、v1, v2, v3)f2(v2, v4, v3)f3(v3, v4, v6)f4(v4, v5, v6)邻接矩阵(Adjacency matrix)的数据结构以矩阵的方式存储点与点之间的连接关系,对于图 0.1.a中的网格,可表示为:v1v2v3v4v5v6v111v2111v31111v41111v511v6111顶点边面(Vertex-Edge-Face)的数据结构同时包含了边和面的连接关系,对于图 0.1.a中的网格,可表示为:边顶点e1(v1, v3)e2(v1, v2)e3(v2, v3)e4(v2, v4)e5(v3, v5)e6(v3, v6)e7(v4, v6)e8(v4,

13、v5)e9(v5, v6)面顶点(CCW)边f1(v1, v2, v3)(e1, e2, e3)f2(v2, v4, v3)(e3, e4, e5)f3(v3, v4, v6)(e5, e7, e6)f4(v4, v5, v6)(e7, e8, e9)数据结构的选取,取决于对三角网格所进行的操作,如果需要频繁的对三角面片进行删除和插入的操作,如对三角网格进行简化时,则需要利用链表而非数组的方式来存储顶点的几何信息及连接关系,如果需要频繁的对顶点、边、面的邻接关系进行查询,则需要在避免过多冗余信息的同时,尽可能保存多的邻接关系,使得查询的复杂度为,如在顶点边面(Vertex-Edge-Face)

14、的数据结构中对边的信息增加保存邻接三角形的信息,对顶点增加邻接边的信息。对于图 0.1.a中的网格,边的信息变成为:边顶点邻接面e1(v1, v3)f1e2(v1, v2)f1e3(v2, v3)f1, f2e4(v2, v4)f2e5(v3, v5)f2, f3e6(v3, v6)f3e7(v4, v6)f3, f4e8(v4, v5)f4e9(v5, v6)f43.3 三角网格的绘制在OpenGL中,任何复杂的几何物体最终都要描述成一个顶点的有序集合,即使是连续的曲线曲面,也需要首先对这些曲线曲面进行离散化,而后这些有序的顶点集合再组装成基本图元的集合。OpenGL中,基本图元包括点、线段、三角形、多边形,而三角网格即为三角形这种基本图元的集合。顶点表示:glVertex2, 3, 4s, i, f, dv(坐标)此函数指定顶点的各个坐标分量。基本几何图元基本几何图元的定义,以函数glBegin()开始,glEnd()结束,两函数之间的部

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号