VCGLib中邻接关系的维护依赖于各种单形中存储的相关信息。在VCGLib中几乎所有的算法实现都假设存在vcg::face::VertexRef,该属性存储了三个指向顶点对象的指针,可以通过V()函数访问。
面-面邻接关系
面之间的邻接关系存储于vcg::face::FFAdj(正四面体为vcg::face::TTAdj),该属性通过边来记录面之间的邻接关系。下图显示了两个三角形面:
图中顶点编号从0到2,以逆时针顺序编号,边i(i=0..2)的两个端点分别为i和(i+1)%3,因此图中面f0和面f1的公共边对f0而言是0,对f1而言是1。
对于面f的每个边e,vcg::face::FFAdj存储以下信息: FFp(e):指向共享边e的面的指针,若e是border,则该指针指向自己;
FFi(e):在指向的面中e的索引。
例如在上图中,有: f1->FFp(1) == f0
f1->FFi(1) == 0
f0->FFp(0) == f1
f0->FFi(0) == 1
VCGLib中对于非流形的情况也有考虑,因为只是想简单了解,没有看。
Pos
三角网格中,Pos为一三元组,pos = {v,e,f},e是f的边,v是e的端点。下图以小三角形的形式显示了三角网格中的一些pos,在每个面中,每个小三角形指向一个顶点,倚靠一条边。