简介
网格形变如果算法优秀的话,那么动画里就会大量应用。
先提供一个比较简单的拉普拉斯网格形变简介
参考文献
https://www.cse.iitb.ac.in/~cs749/spr2017/lecs/18_laplace.pdf
https://blog.csdn.net/qq_31804159/article/details/103409465
核心公式
(left(egin{array}{c} ext {LaplacianMatrix} \ ext {FixedPointMatrix} \ ext {oneEditPoint}end{array} ight) *( ext {newPointPosition})=left(egin{array}{c} ext {LaplacianPointMatrix} \ ext {FixedPointPosionMatrix} \ ext {YouWantThisPointToMoveWhere}end{array} ight))
分步公式简介
拉普拉斯矩阵的计算公式:
注:矩阵的大小是示例
对于每个点如果他和某个点相互连接的话,那么计算他的1邻域点的个数
LaplacianMatrix(=left(egin{array}{cccc}1 & -frac{1}{ ext {neighborNumber}} & 0 & 0 \ -frac{1}{ ext {neighborNumber}} & 1 & 0 & 0 \ 0 & 0 & 1 & 0 \ 0 & 0 & 0 & 1end{array}
ight))
固定点矩阵计算:
FixedPointMatrix(=left(egin{array}{cccc}0 & 0 & 1 & 0 \ 0 & 1 & 0 & 0 \ 0 & 0 & 0 & 1 \ 1 & 0 & 0 & 0end{array}
ight))
就是某个固定点是选中的,那么在那一行的idx(openmesh中的属性)就会标为1
oneEditPoint 同上
(newPointPosition) 就是n*3的矩阵(待求解)
LaplacianPointMatrix 表示的是$$delta_{i}=frac{sum_{j in N(i)} w_{i j}left(V_{i}-V_{j}
ight)}{sum_{j in N(i)} w_{i j}}$$ 所代表的点的微分坐标
简化表示可以认为w权重为1
FixedPointPosionMatrix 表示的是固定点的坐标未变
YouWantThisPointToMoveWhere 你想要把你的编辑点坐标移动的位置
原理分析
说实话原理不是很清楚,
个人理解
微分坐标其实保存的信息就是某个点的一邻域的局部信息,固定点就是约束,然后在形变的过程中尽量保证某个点的局部信息不变。
code
https://github.com/lishaohsuai/digital_geo
TIPS
软件只能对 bunmy 模型进行形变 因为没有做好交互功能。