將三角網格上的頂點坐標(x,y,z)看作3個獨立的標量場,那么網格上每個三角片都存在3個獨立的梯度場。該梯度場是網格的微分屬性,相當於網格的特征,在形變過程中隨控制點集的移動而變化。那么當用戶拖拽網格上的控制點集時,網格形變問題即變為求解以下式子:
根據變分法,上式最小化即求解泊松方程:
其中Φ為待求的網格形變后坐標,w為網格形變后的梯度場。
上式可以進一步表示為求解稀疏線性方程組:
其中L為網格的拉普拉斯算子,b為梯度場w在網格頂點處的散度值。
問題的關鍵是如何得到網格形變后的梯度場w,文章[Yu et al. 2004]提到其是通過由控制點集變換的加權運算得到,並且提出了幾種不同的加權方式(線性加權,高斯加權等)。另外文章[Zayer et al. 2005]中提到可以在網格內構建一個調和場作為加權系數。
1.離散梯度算子定義:
假設f是一個分片線性函數,在網格的每個三角片{xi,xj,xk}的頂點處有f(xi)=fi,f(xj)=fj,f(xk)=fk,通過線性插值可以知道f在三角片上每一點處的值為:
這樣f的梯度如下:
其中基函數Φi,Φj,Φk滿足Φi+Φj+Φk=1,那么它們梯度之和▽Φi+▽Φj+▽Φk=0。所以f的梯度可以寫成如下形式:
經簡單計算可以求得▽Φi的表達式是,同樣也可以寫出▽Φj、▽Φk的表達式,其中⊥表示將向量逆時針旋轉90度,A表示三角片的面積。
2.離散散度算子定義:
設向量值函數w:S→R3,S表示網格,w表示在每個三角片上的向量,那么w在頂點xi處的散度可以定義為:
其中T(xi)表示頂點xi的1環鄰域三角片,AT表示三角片T的面積。
3.離散Laplace算子定義:
將梯度算子表達式代入散度算子表達式可以得到頂點xi處的Laplace算子如下形式:
其中N(xi)表示頂點xi的1環鄰域點。
效果:
本文為原創,轉載請注明出處:http://www.cnblogs.com/shushen。
參考文獻:
[1] Y. Yu, K. Zhou, D. Xu, X. Shi, H. Bao, B. Guo, and H.-Y. Shum. "Mesh Editing with Poisson-Based Gradient Field Manipulation." ACM Transactions on Graphics (Proc. SIGGRAPH) 23:3 (2004), 644-51.
[2] R. Zayer, C. Rossl, Z. Karni, and H.-P. Seidel. "Harmonic Guidance for Surface Deformation." Computer Graphics Forum (Proc. Eurographics) 24:3 (2005), 601-10.
[3] 許棟. 微分網格處理技術[D]. 浙江大學, 2006.
[4] 劉昌森. 三角網格曲面上的laplace算子及其應用[D]. 中國科學技術大學, 2012.