[图形学]拉普拉斯网格变形(Laplace Deformation)原理及复现

本文详细介绍了拉普拉斯网格变形的原理,包括拉普拉斯坐标、拉普拉斯矩阵及其计算,并探讨了添加锚点的原因。通过矩阵求解方法,解释了如何在形变过程中保持细节信息不变,同时提供了C++代码实现的参考。
摘要由CSDN通过智能技术生成

本文原理参考论文: Laplacian Mesh Processing

本文复现参考:Mesh模型的Laplace Deformation(网格形变 - 拉普拉斯形变) - C++代码实现


拉普拉斯网格变形是一个相当经典的工作,本工作复现了一下基础的部分,这里记录下原理部分和结果。
复现结果演示如下:

在这里插入图片描述

拉普拉斯网格变形原理

可以用用一句话来解释拉普拉斯网格变形的原理: 形变前的点的拉普拉斯坐标与形变后的点的拉普拉斯坐标尽可能相等。这句话里面其实只有点的拉普拉斯坐标是我们所不清楚的,下面阐述拉普拉斯坐标为何物。

拉普拉斯坐标

拉普拉斯坐标是一个相当简单的概念,对于一个三角网格模型M=(V,E,F),V为顶点集,E为边集,F为三角面片集。V(v1,…vn)中每一个点的坐标表示都是笛卡尔坐标,下图(源自论文Laplacian Mesh Processing)和公式定义了拉普拉斯坐标的表示,点vi的笛卡尔坐标减去所有vi的相邻点vj的笛卡尔坐标的平均值,di表示vi的相邻点的个数。
图源自论文Laplacian Mesh Processing

δ i = ( δ i ( x ) , δ i ( y ) , δ i ( z ) ) = v i − 1 d i ∑ j ∈ N ( i ) v j \delta_{i}=\left(\delta_{i}^{(x)}, \delta_{i}^{(y)}, \delta_{i}^{(z)}\right)=\mathbf{v}_{i}-\frac{1}{d_{i}} \sum_{j \in N(i)} \mathbf{v}_{j} δi=(δi(x),δi(y),δi(z))=vidi1jN(i)vj
拉普拉斯坐标蕴含了网格模型中的细节信息,而细节信息正是我们在网格形变后不希望改变的,拉普拉斯网格变形正是基于这一约束。

拉普拉斯矩阵

拉普拉斯坐标的计算我们可以按照上面的公式分别求解,但是为了简化计算,通常用矩阵乘法计算拉普拉斯坐标。只需要定义拉普拉斯矩阵L,便可求解拉普拉斯坐标 δ = L*V ( V表示所有点构成的笛卡尔坐标矩阵)。下面给出L的定义:

L = I − D − 1 A L=I-D^{-1} A L=ID1A
其中,I为单位矩阵,D矩阵是一个对角矩阵,对角线上的值Dii = di,di是第i个点的邻接点数目 ,A 矩阵是邻接矩阵。若点vi和vj相邻,Aij = 1,若不相邻,则 Aij = 0。
A i j = { 1 ( i , j ) ∈ E 0  otherwise  A_{i j}=\left\{\begin{array}{ll}{1} & {(i, j) \in E} \\ {0} & {\text { otherwise }}\end{array}\right. A

  • 19
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值