三维网格形变算法(Gradient-Based Deformation)
将三角网格上的顶点坐标(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.
三维网格形变算法(Gradient-Based Deformation)的更多相关文章
- 三维网格形变算法(Laplacian-Based Deformation)
网格上顶点的Laplace坐标(均匀权重)定义为:,其中di为顶点vi的1环邻域顶点数. 网格Laplace坐标可以用矩阵形式表示:△=LV,其中,那么根据网格的Laplace坐标通过求解稀疏线性方程 ...
- 三维网格形变算法(Linear rotation-invariant coordinates和As-Rigid-As-Possible)
在三维网格形变算法中,个人比较喜欢下面两个算法,算法的效果都比较不错, 不同的是文章[Lipman et al. 2005]算法对控制点平移不太敏感.下面分别介绍这两个算法: 文章[Lipman et ...
- 三维动画形变算法(Laplacian-Based Deformation)
网格上顶点的Laplace坐标(均匀权重)定义为:,其中di为顶点vi的1环邻域顶点数. 网格Laplace坐标可以用矩阵形式表示:△=LV,其中,那么根据网格的Laplace坐标通过求解稀疏线性方程 ...
- 高阶Laplace曲面形变算法(Polyharmonic Deformation)
数学上曲面的连续光滑形变可以通过最小化能量函数来建模得到,其中能量函数用来调节曲面的拉伸或弯曲程度,那么能量函数最小化同时满足所有边界条件的最优解就是待求曲面. 能量函数通常是二次函数形式: 其中S* ...
- 三维动画形变算法(Gradient-Based Deformation)
将三角网格上的顶点坐标(x,y,z)看作3个独立的标量场,那么网格上每个三角片都存在3个独立的梯度场.该梯度场是网格的微分属性,相当于网格的特征,在形变过程中随控制点集的移动而变化.那么当用户拖拽网格 ...
- 三维动画形变算法(Linear rotation-invariant coordinates和As-Rigid-As-Possible)
在三维网格形变算法中,个人比较喜欢下面两个算法,算法的效果都比较不错, 不同的是文章[Lipman et al. 2005]算法对控制点平移不太敏感.下面分别介绍这两个算法: 文章[Lipman et ...
- 三维动画形变算法(Mixed Finite Elements)
混合有限元方法通入引入辅助变量后可以将高阶微分问题变成一系列低阶微分问题的组合.在三维网格形变问题中,我们考虑如下泛函极值问题: 其中u: Ω0 → R3是变形体的空间坐标,上述泛函极值问题对应的欧拉 ...
- 三维网格分割算法(Random Walks)
首先以一维随机游走(1D Random Walks)为例来介绍下随机游走(Random Walks)算法,如下图所示,从某点出发,随机向左右移动,向左和向右的概率相同,都为1/2,并且到达0点或N点则 ...
- 三维网格去噪算法(L0 Minimization)
[He et al. 2013]文章提出了一种基于L0范数最小化的三角网格去噪算法.该思想最初是由[Xu et al. 2011]提出并应用于图像平滑,假设c为图像像素的颜色向量,▽c为颜色向量的梯度 ...
随机推荐
- Error: Error setting TTL index on collection : sessions
Error: Error setting TTL index on collection : sessions 一.步骤一: 这个问题一般是直接升级 mongodb和connect-mongo的版本为 ...
- [deviceone开发]-do_QRCode的简单示例
一.简介 do_QRCode组件可以用来生成二维码,识别二维码图片文件,这个示例直观的展示组件基本的使用方式. 二.效果图 三.相关下载 https://github.com/do-project/c ...
- js异步方式
node.js的例子 1.回调 创建 main.js 文件 var fs = require("fs"); fs.readFile('input.txt','utf8', func ...
- SubSonic2.2框架的使用方法和配置说明
网上.net ORM框架也不少,但是我感觉这个框架配置很简单的,前几年貌似用的人很多,现在好像用得比较少了,随着它官方的升级现在已经到3.0了, 并且采用T4 模板生成的方式,代码量好像减少了.不过我 ...
- WinForm-GridView
前端: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="CKXM.aspx. ...
- form中动态生成Radiobutton控件
public partial class GetLabelFields : Form { int tableCount; public GetLabelFields(AxMapControl axma ...
- SharePoint 2013 REST 服务使用简介
1.创建测试使用列表”REST Demo”,插入一些测试数据,如下图: 2.添加内容编辑器,并且添加脚本引用以及HTML代码,如下图: Result的Div为显示结果使用,input标签触发REST服 ...
- kubernetes听云实战发布版
➠更多技术干货请戳:听云博客 听云线上使用k8s已经有一段时间了,下面对一些听云使用过程中的问题进行一些梳理,包括架构设计,安装部署和后期维护. 目录结构如下: 下面进入正题: 我们以听云系统的一个报 ...
- 多层架构(参数化SQL、存储过程)
设置参数化SQL的方式: ------语法一 //设置SQL语句中的参数 //定义 SqlParameter parUid = new SqlParameter("@userId" ...
- get请求报文
GET /02_WEB_HTTP/index.html?username=admin&password=123123 HTTP/1.1 Accept: application/x-ms-app ...