下面介紹一種基於Poisson方程的三角網格補洞方法。該算法首先須要根據孔洞邊界生成一個初始化補洞網格,而後經過法向估算和Poisson方程來修正補洞網格中三角面片的幾何形狀,使其可以適應並與周圍的原始網格融合。算法的主要步驟以下:html
1-檢測孔洞邊界並初始化補洞網格算法
2-調整補洞網格函數
2.1-計算補洞網格中頂點的指望法向spa
2.2-基於指望法向旋轉補洞網格中的三角面片3d
2.3-基於Poisson方程調整補洞網格頂點位置orm
下面分別介紹算法中每一步的具體過程:htm
1:檢測孔洞邊界並初始化補洞網格blog
檢測孔洞邊界和初始化補洞網格方法與之前介紹的方法相同。因爲初始化補洞網格沒法與原始孔洞周圍的網格有效融合,所以須要調整補洞網格的頂點位置使得補洞網格與原始網格之間光滑過渡。get
2.1:計算補洞網格中頂點的指望法向it
因爲已知原始網格孔洞邊界的法向,將其做爲補洞網格邊界的法向,構建Laplace方程求解補洞網格內部頂點的法向分佈。
假設f表示在每一個頂點上的標量,那麼網格域上在頂點xi處的Laplace算子定義以下(不考慮面積影響):
其中N1(xi)表示頂點xi的1環鄰域點,αij和βij爲邊eij對應的2個對角。
2.2:基於指望法向旋轉補洞網格中的三角面片
計算獲得補洞網格中頂點的指望法向以後,能夠進一步求得三角面片的指望法向,三角面片的指望法向是其三個頂點指望法向的平均值,而後補洞網格中全部的三角面片根據指望法向進行旋轉。旋轉參數計算方法以下:假設ni、ni’和ci爲三角面片fi的原始法向、指望法向和重心位置,ni與ni’的叉乘方向a爲三角面片fi的旋轉軸方向,ni與ni’之間的夾角φ爲三角面片fi的旋轉角度,那麼三角面片fi將以ci爲旋轉中心,繞旋轉軸a旋轉角度φ到新的位置。
2.3:基於Poisson方程調整補洞網格頂點位置
旋轉補洞網格的三角面片會撕裂補洞網格,所以咱們利用Poisson方程將其重構成連續的網格曲面。在創建Poisson方程時咱們須要先計算撕裂網格的梯度場,將其做爲Poisson方程的引導場,從而進行網格頂點位置的調整。
其中f爲待求的調整後網格頂點位置,w爲撕裂網格的梯度場。
假設f表示在每一個頂點上的標量,那麼網格域上標量場f在任意三角面片T內的梯度算子定義以下:
其中基函數梯度▽Φi的表達式是,⊥表示將向量逆時針旋轉90度,AT表示三角片T的面積。
假設w表示在每一個三角片上的向量,那麼網格域上向量場w在頂點xi處的散度算子定義以下:
其中T1(xi)表示頂點xi的1環鄰域三角片,AT表示三角片T的面積。
效果:
本文爲原創,轉載請註明出處:http://www.cnblogs.com/shushen
相關:
三維網格形變算法(Gradient-Based Deformation):http://www.cnblogs.com/shushen/p/4932089.html
三維網格補洞算法(Radial Basis Function):http://www.cnblogs.com/shushen/p/5759679.html
參考文獻:
[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.