網格半邊結構(Half edge mesh)

網格半邊結構(Half edge mesh)

一、網格的表示

在計算機圖形學上,表達表面網格的數據結構有三種,分別是面列表( List of faces)、鄰接矩陣(Adjacency matrix)、半邊結構(Half-edge)。git

面列表示例:
在這裏插入圖片描述
github

鄰接矩陣示例:
在這裏插入圖片描述
json

半邊結構示例:
在這裏插入圖片描述
網絡

在這裏插入圖片描述

二、網格分類

流形網格(manifold mesh)
非流形網格(non-manifold mesh)
數據結構

若是網格的每一個邊最多被兩個面片共用,那麼這個網格就是流形網絡,不然稱爲非流形網絡。spa

非流形網絡例子:
在這裏插入圖片描述
.net

三、網格半邊結構(Halfedge)

網格半邊結構指針

半邊數據結構&網格細分與簡化code

doubly connected edge list 或者叫 half-edge data structure。
最大特色是半邊,每一個邊分爲兩個半邊,每一個半邊都是一個有向邊,方向相反。若是一個邊被兩個面片公用,則每一個面片都能各自擁有一個半邊。若是一個邊僅被一個面片佔用(邊界邊),則這個面片僅擁有該邊的其中一個半邊,另外一個半邊爲閒置狀態。每一條半邊僅存儲它的起點指針,半邊數據結構僅支持流形網絡。邊沿逆時針方向朝向每一個面。
orm

在這裏插入圖片描述

四、網格半邊結構實例

以一個正方形爲例,這是在c4d導出的正方形的.obj文件:

# WaveFront *.obj file (generated by CINEMA 4D)

v -50 -50 0
v 50 -50 0
v -50 50 -0
v 50 50 -0
# 4 vertices

vn 0 0 1
# 1 normal

vt 0 0 0
vt 0 1 0
vt 1 1 0
vt 1 0 0
# 4 texture coordinates


f 2/4/1 4/3/1 3/2/1 1/1/1

把頂點和麪信息提取出來:
在這裏插入圖片描述

v:表示頂點, [i]表示索引, v[0]就表明頂點第0個。邊的表示相似,用e。

{ 
  "verts":[
    { 
        "x":-50,
        "y":-50,
        "z":0
    },
    { 
        "x":50,
        "y":-50,
        "z":0
    },
    { 
        "x":-50,
        "y":50,
        "z":0
    },
    { 
        "x":50,
        "y":50,
        "z":0
    }
  ],
  "faces":[
    [1,3,2,0]
  ]
}

這個正方形由4個頂點和一個四變形組成。

頂點和邊的關係

在這裏插入圖片描述

一共構建了8條邊,索引是0~7。逆時針,邊拓撲的關係:

e[0]: { prevEage: e[6], nextEage: e[3], vertex: v[3], face: 0}
e[1]: { prevEage: -1, nextEage: -1, vertex: v[1], face: -1}
e[2]: { prevEage: -1, nextEage: -1, vertex: v[3], face: -1}
e[3]: { prevEage: e[0], nextEage: e[5], vertex: v[2], face: 0}
e[4]: { prevEage: -1, nextEage: -1, vertex: v[2], face: -1}
e[5]: { prevEage: e[3], nextEage: e[6], vertex: v[0], face: 0}
e[6]: { prevEage: e[5], nextEage: e[0], vertex: v[1], face: 0}
e[7]: { prevEage: -1, nextEage: -1, vertex: v[0], face: -1}

解釋第一條:

e[0]這條邊:
起始頂點是: v[3]
上一條邊是: e[6]
下一條邊是: e[3]

構成面的邊只有e[0],e[3],e[5],e[6].因此其餘邊都是閒置狀態(-1)。

相關文章
相關標籤/搜索