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