三维网格信息分为两个部分:几何(Geometry:顶点的位置信息)信息和拓扑(Topology:点线面之间的邻接关系)信息
保存点面信息的数据结构:
1. 以面为中心(face set):储存面,每个面包含三角形的顶点的坐标值.占用大量内存
2. 共享顶点:顶点坐标数组,三角面片为顶点索引,没有邻接关系。
3. 基于面连接
4. 基于边连接
5. 邻接矩阵
6. 角表
7. 半边数据结构
半边数据结构
http://www.flipcode.com/archives/The_Half-Edge_Data_Structure.shtml(内容来源)
如下图使用半边数据结构表示三角面片,黄点为点,蓝线为半边,半边具有方向,黄线为指针。
点:位置信息以及和此点相关的一个半边(后面再查找相邻的边的时候会介绍为啥这么处理)
struct HE_vert
{
float x;
float y;
float z;
HE_edge* edge; // one of the half-edges emantating from the vertex
};
半边:半边的终点,另一条与该半边方向相反的半边,该半边所在的面,以及半边顺时针(或逆时针)的顺序的半边
struct HE_edge
{
HE_vert* vert; // vertex at the end of the half-edge
HE_edge* pair; // oppositely oriented adjacent hal