第七章:Mesh
0 基本描述
- 網格有一系列的三角面片組成
- 三角面片包含三個點的索引
- 點索引可以在點表中找到相應的點
1 Tessellation
1.1 基礎網格化方法(低效)
- 檢測多邊形的任意兩頂點連線是否與任意邊相交
- 如果相交則無法切割,否則可以切割,繼續用該方法進行三角化.
1.2 Ear clipping
- 取相鄰三個頂點i,i+1,i+2,檢查線段[i, i+2]是否與邊相交
- 如果沒有相交則將該耳朵從多邊形中去除,繼續三角化
Subdivision(細分)
2.1 Loop Subdivision
- 每個邊都會添加一個新節點,連接後一個三角形轉變爲四個三角形,同時更新每個原始頂點的位置
2.1.1頂點更新
如圖(a)所示,新的頂點根據相鄰點及自己的權重得到,n爲相鄰點數
2.1.2新節點
是兩個端點,是兩個相對頂點,如圖(b)所示
2.2 Catmull-Clark subdivision
- 設四邊形的四個頂點爲v0、v1、v2、v3,則新增加的頂點位置爲v = 1/4*(v0 + v1 + v2 + v3)
- 設內部邊的兩個端點爲v0、v1,與該邊相鄰的兩個四邊形頂點分別爲v0、v1、v2、v3和v0、v1、v4、v5,則新增加的頂點位置爲v = 3/8*(v0 + v1) + 1/16*(v2 + v3 + v4 + v5)。
- 設內部頂點v0的相鄰點爲v1、v2,…,v2n,則該頂點更新後位置爲,其中α、β、γ分別爲α = 1 - β - γ。
- 設邊界邊的兩個端點爲v0、v1,則新增加的頂點位置爲v = 1/2*(v0 + v1)。
- 設邊界頂點v0的兩個相鄰點爲v1、v2,則該頂點更新後位置爲v = 3/4v0 + 1/8(v1 + v2)。
2.3 Subdivision
- Different from Loop’s scheme Kobbelt, Kobbelt’s scheme 3 scheme creates only 3 new triangles per-step
- It creates a new vertex (called mid-vertex) in the middle of each triangle, instead of a new vertex per edge.
爲了得到更均勻分佈的三角形,每個原始三角形的邊都被翻轉,使之連接兩個相鄰中間頂點而不是連接兩個已經存在的舊頂點
2.3.1頂點更新
第一個式子爲中間點的計算,第二個式子是三角形頂點的位置更新,第三個式子是的計算
3 Simplification(簡化)
Approximating a given input mesh with a less complex but geometrically faithful representation
- remove reddundant(多餘的) geometry
- reduce model size
- improve run-time performance
3.1 levels of detail (LOD)
- Topology (拓撲結構):多邊形網格的連接結構
- Genus(虧格):網格表面孔洞的數目。如球或立方體爲0,圓環爲1
3.2 簡化的基本算法
3.2.1 Vertex Decimation頂點刪除
3.2.2 Edge Contraction邊坍塌(邊變成點)
3.2.3 面收縮(面變成點)
3.3 簡化算法
3.3.1 Schroeder的局部判別準則
對於網格內部頂點v,記其周圍相鄰面片集爲S,則該點的平坦性準則由下述的距離來描述:
這裏A(f),c(f),n(f)分別爲三角面片的面積、中心和法向量