1 / 17
文档名称:

三角网格.pdf

格式:pdf   大小:1,543KB   页数:17页
下载后只包含 1 个 PDF 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

三角网格.pdf

上传人:小sjj 2022/9/13 文件大小:1.51 MB

下载得到文件列表

三角网格.pdf

文档介绍

文档介绍::.
最简单的情形,多边形网格不过是一个多边形列表;三角网格就是全部由三角形
组成的多边形网格。多边形和三角网格在图形学最简单的情形,多边形网格不过是一个多边形列表;三角网格就是全部由三角形
组成的多边形网格。多边形和三角网格在图形学和建模中广泛使用,用来模拟复
杂物体的表面,如建筑、车辆、人体,当然还有茶壶等。:
当然,任意多边形网格都能转换成三角网格,三角网格以其简单性而吸引人,相
对于一般多边形网格,许多操作对三角网格更容易。
表示网格
三角网格为一个三角形列表,所以最直接的表示方法是用三角形数组:
:Atrivialrepresentationofatrianglemesh
structTriangle{
Vector3p[3];
};
structTriangleMesh{
inttriCount;
Triangle*triList;
};
对于某些应用程序,这种表示方法已经足够。然而,术语"网格"隐含的相邻三角
形的连通性却未在这种简单表示中有任何体现。实际应用中出现的三角网格,每
个三角形都和其他三角形共享边。于是,三角网格需要存储三类信息:
(1)顶点。每个三角形都有三个顶点,各顶点都有可能和其他三角形共享。(2)边。连接两个顶点的边,每个三角形有三条边。
(3)面。每个三角形对应一个面,我们可以用顶点或边列表表示面。
索引三角网格
在索引三角网格中,我们维护了两个列表:顶点表与三角形表。
每个顶点包含一个3D位置,也可能有如纹理映射坐标、表面法向量、光照值等
附加数据。
每个三角形由顶点列表的三个索引组成。通常,顶点列出的顺序是非常重要的,
因为我们必须考虑面的"正面"和"反面"。从前面看时,我们将用顺时针方向列出
顶点。另外一些信息也存在这一级中,如预先计算的表面法向量,表面属性(纹
理映射)等。
:
:Indexedtrianglemesh
//structVertexistheinformationwestoreatthevertexlevel
structVertex
{
//3Dpositionofthevertex
Vector3p;
//Otherinformationcouldincludetexturemappingcoordinates,
//asurfacenormal,lightingvalues,etc.
}
//structTriangleistheinformationwestoreatthetrianglelevel
structTriangle
{
//Indicesintothevertexlist
intvertex[3];
//Otherinformationcouldincludeanormal,materialinformation
,etc.
}
//structTriangleMeshstoresanindexedtrianglemesh
structTriangleMesh
{//Thevertices
intvertexCount;
Vertex*vertexList;
//Thetriangles
inttriangleCount;
Triangle*triangleList;
};
实践中,三角网格类会有一系列方法,用于存取和维护顶点、三角形列表。当然,
存储多边形网格,还需要定义一个多边形类,用来表达有任意多顶点的面。为简
化和提高效率,我们可以对每个多边形的最大定点数做出限制。
注意到,索引三角形列表中的邻接信息是隐含的。例如:边信息没有直接存储,
但我们还是可以通过搜索三角形表找出公共边。和前面"三角形数组"方式相比,
这种方式确实能节省不少空间。原因是信息存于顶点级别,它的整数索引比之三
角形数组里存储的顶点重复率要小得多。
高级技术
简单索引三角网格对于基本应用已经足够了,但为加高效地实现某些操作还
可以进行一些改进。主要的问题是邻接信息没有显式表达,所以必须从三角形列
表中搜索。另一种表达方法可以在常数时间内取得这种信息。
方法是维护一个边列表,每个边由两个端点定义,同时维护一个共享该边的三角
形列表。这样,三角形可视为三条边而非三个点的列表,也就是说它是边列表而
不是点列表的索引。该思想的一个扩展称作"winged模型edge",对每一顶点,
存储使用该点的边的索引。
针对渲染的特