下面介紹一種基于Poisson方程的三角網(wǎng)格補(bǔ)洞方法。該算法首先需要根據(jù)孔洞邊界生成一個初始化補(bǔ)洞網(wǎng)格,然后通過法向估算和Poisson方程來修正補(bǔ)洞網(wǎng)格中三角面片的幾何形狀,使其能夠適應(yīng)并與周圍的原始網(wǎng)格融合。算法的主要步驟如下:
1-檢測孔洞邊界并初始化補(bǔ)洞網(wǎng)格
2-調(diào)整補(bǔ)洞網(wǎng)格
2.1-計算補(bǔ)洞網(wǎng)格中頂點的期望法向
2.2-基于期望法向旋轉(zhuǎn)補(bǔ)洞網(wǎng)格中的三角面片
2.3-基于Poisson方程調(diào)整補(bǔ)洞網(wǎng)格頂點位置
下面分別介紹算法中每一步的具體過程:
1:檢測孔洞邊界并初始化補(bǔ)洞網(wǎng)格
檢測孔洞邊界和初始化補(bǔ)洞網(wǎng)格方法與以前介紹的方法相同。由于初始化補(bǔ)洞網(wǎng)格無法與原始孔洞周圍的網(wǎng)格有效融合,因此需要調(diào)整補(bǔ)洞網(wǎng)格的頂點位置使得補(bǔ)洞網(wǎng)格與原始網(wǎng)格之間光滑過渡。
2.1:計算補(bǔ)洞網(wǎng)格中頂點的期望法向
由于已知原始網(wǎng)格孔洞邊界的法向,將其作為補(bǔ)洞網(wǎng)格邊界的法向,構(gòu)建Laplace方程求解補(bǔ)洞網(wǎng)格內(nèi)部頂點的法向分布。
Laplace算子:
假設(shè)f表示在每個頂點上的標(biāo)量,那么網(wǎng)格域上在頂點xi處的Laplace算子定義如下(不考慮面積影響):
其中N1(xi)表示頂點xi的1環(huán)鄰域點,αij和βij為邊eij對應(yīng)的2個對角。
function L = Laplace_Matrix(V, F) fring = compute_vertex_face_ring(F); fpoint = [V(F(:,1),:), V(F(:,2),:), V(F(:,3),:)]; farea = 0.5*doublearea(V, F); nV = size(V,1); L = sparse([],[],[],nV,nV); for i = 1:nV nf = length(fring{i}); for j = 1:nf f = F(fring{i}(j),:); Tk = fpoint(fring{i}(j),:); gradBi = gradB(f, i, Tk); for k = 1:3 gradBj = gradB(f, f(k), Tk); L(i,f(k)) = L(i,f(k)) + dot(gradBi,gradBj)*farea(fring{i}(j)); end end end end
View Code
2.2:基于期望法向旋轉(zhuǎn)補(bǔ)洞網(wǎng)格中的三角面片
計算得到補(bǔ)洞網(wǎng)格中頂點的期望法向之后,可以進(jìn)一步求得三角面片的期望法向,三角面片的期望法向是其三個頂點期望法向的平均值,然后補(bǔ)洞網(wǎng)格中所有的三角面片根據(jù)期望法向進(jìn)行旋轉(zhuǎn)。旋轉(zhuǎn)參數(shù)計算方法如下:假設(shè)ni、ni’和ci為三角面片fi的原始法向、期望法向和重心位置,ni與ni’的叉乘方向a為三角面片fi的旋轉(zhuǎn)軸方向,ni與ni’之間的夾角φ為三角面片fi的旋轉(zhuǎn)角度,那么三角面片fi將以ci為旋轉(zhuǎn)中心,繞旋轉(zhuǎn)軸a旋轉(zhuǎn)角度φ到新的位置。
2.3:基于Poisson方程調(diào)整補(bǔ)洞網(wǎng)格頂點位置
旋轉(zhuǎn)補(bǔ)洞網(wǎng)格的三角面片會撕裂補(bǔ)洞網(wǎng)格,因此我們利用Poisson方程將其重構(gòu)成連續(xù)的網(wǎng)格曲面。在建立Poisson方程時我們需要先計算撕裂網(wǎng)格的梯度場,將其作為Poisson方程的引導(dǎo)場,從而進(jìn)行網(wǎng)格頂點位置的調(diào)整。
其中f為待求的調(diào)整后網(wǎng)格頂點位置,w為撕裂網(wǎng)格的梯度場。
梯度算子:
假設(shè)f表示在每個頂點上的標(biāo)量,那么網(wǎng)格域上標(biāo)量場f在任意三角面片T內(nèi)的梯度算子定義如下:
其中基函數(shù)梯度▽Φi的表達(dá)式是,⊥表示將向量逆時針旋轉(zhuǎn)90度,AT表示三角片T的面積。
散度算子:
假設(shè)w表示在每個三角片上的向量,那么網(wǎng)格域上向量場w在頂點xi處的散度算子定義如下:
其中T1(xi)表示頂點xi的1環(huán)鄰域三角片,AT表示三角片T的面積。
效果:
相關(guān):
網(wǎng)格形變算法(Gradient-Based Deformation):http://www.cnblogs.com/shushen/p/4932089.html
網(wǎng)格補(bǔ)洞算法(Radial Basis Function):http://www.cnblogs.com/shushen/p/5759679.html
參考文獻(xiàn):
[1] Wei Zhao, Shuming Gao, and Hongwei Lin. 2007. A robust hole-filling algorithm for triangular mesh. Vis. Comput. 23, 12 (November 2007), 987-997.